Wolfram Sang : comdlg32: Filedlg should not add extension if it contains a glob.
Alexandre Julliard
julliard at winehq.org
Mon Jan 31 11:26:13 CST 2011
Module: wine
Branch: master
Commit: 5cb4c55335c5e1192a6ac3b6f97db87f6344c7cd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5cb4c55335c5e1192a6ac3b6f97db87f6344c7cd
Author: Wolfram Sang <wolfram at the-dreams.de>
Date: Sat Jan 29 09:15:34 2011 +0100
comdlg32: Filedlg should not add extension if it contains a glob.
---
dlls/comdlg32/filedlg.c | 4 ++--
dlls/comdlg32/tests/filedlg.c | 40 ++++++++++++++++++++++++++++------------
2 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index f36d3a5..2fb0969 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -2491,8 +2491,8 @@ BOOL FILEDLG95_OnOpen(HWND hwnd)
else if ( fodInfos->defext ) /* attach the default file extension*/
filterExt = fodInfos->defext;
- /* If extension is .*, ignore it */
- if (filterExt[0] != '*')
+ /* If extension contains a glob, ignore it */
+ if ( filterExt && !strchrW(filterExt, '*') && !strchrW(filterExt, '?') )
{
/* Attach the dot*/
lstrcatW(lpstrPathAndFile, szwDot);
diff --git a/dlls/comdlg32/tests/filedlg.c b/dlls/comdlg32/tests/filedlg.c
index 0320e7e..73e8d36 100644
--- a/dlls/comdlg32/tests/filedlg.c
+++ b/dlls/comdlg32/tests/filedlg.c
@@ -1052,6 +1052,15 @@ static UINT_PTR WINAPI test_extension_wndproc(HWND dlg, UINT msg, WPARAM wParam,
return FALSE;
}
+static const char *defext_filters[] = {
+ "TestFilter (*.pt*)\0*.pt*\0",
+ "TestFilter (*.ab?)\0*.ab?\0",
+ "TestFilter (*.*)\0*.*\0",
+ NULL /* is a test, not an endmark! */
+};
+
+#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
+
static void test_extension(void)
{
OPENFILENAME ofn = { sizeof(OPENFILENAME)};
@@ -1059,11 +1068,12 @@ static void test_extension(void)
char curdir[MAX_PATH];
char *filename_ptr;
const char *test_file_name = "deadbeef";
+ const char **cur_filter;
DWORD ret;
- BOOL cdret;
+ BOOL boolret;
- cdret = GetCurrentDirectoryA(sizeof(curdir), curdir);
- ok(cdret, "Failed to get current dir err %d\n", GetLastError());
+ boolret = GetCurrentDirectoryA(sizeof(curdir), curdir);
+ ok(boolret, "Failed to get current dir err %d\n", GetLastError());
/* Ignore .* extension */
ofn.lStructSize = sizeof(ofn);
@@ -1075,17 +1085,23 @@ static void test_extension(void)
ofn.lpstrInitialDir = curdir;
ofn.lpfnHook = test_extension_wndproc;
ofn.nFileExtension = 0;
- ofn.lpstrFilter = "All Files (*.*)\0*.*\0";
- strcpy(filename, test_file_name);
-
- ret = GetSaveFileNameA(&ofn);
- filename_ptr = ofn.lpstrFile + strlen( ofn.lpstrFile ) - strlen( test_file_name );
- ok(1 == ret, "expected 1, got %d\n", ret);
- ok(strlen(ofn.lpstrFile) >= strlen(test_file_name), "Filename %s is too short\n", ofn.lpstrFile );
- ok( strcmp(filename_ptr, test_file_name) == 0,
- "Filename is %s, expected %s\n", filename_ptr, test_file_name );
+
+ for (cur_filter = defext_filters; cur_filter < defext_filters + ARRAY_SIZE(defext_filters); cur_filter++) {
+ ofn.lpstrFilter = *cur_filter;
+ strcpy(filename, test_file_name);
+ boolret = GetSaveFileNameA(&ofn);
+ ok(boolret, "expected true\n");
+ ret = CommDlgExtendedError();
+ ok(!ret, "CommDlgExtendedError returned %#x\n", ret);
+ filename_ptr = ofn.lpstrFile + strlen( ofn.lpstrFile ) - strlen( test_file_name );
+ ok( strlen(ofn.lpstrFile) >= strlen(test_file_name), "Filename %s is too short\n", ofn.lpstrFile );
+ ok( strcmp(filename_ptr, test_file_name) == 0,
+ "Filename is %s, expected %s\n", filename_ptr, test_file_name );
+ }
}
+#undef ARRAY_SIZE
+
START_TEST(filedlg)
{
test_DialogCancel();
More information about the wine-cvs
mailing list