Hi, PEBrowse Pro, when saving a session file, calls GetOpenFileName() with initdir pointing to a valid file. This leads to a returned filename like X:\\path\\to\\foo.exe\\foo.pbs Changelog: dlls/commdlg : filedlg.c Handle the cases when initdir is either invalid, or specifies a file. Rein. -- Rein Klazes rklazes@xxxxxxxxx
--- wine/dlls/commdlg/filedlg.c 2004-01-07 07:35:58.000000000 +0100 +++ mywine/dlls/commdlg/filedlg.c 2004-01-12 17:22:57.000000000 +0100 @@ -1159,19 +1159,31 @@ DWORD result; strcpyW(tmpBuf, fodInfos->initdir); - if (tmpBuf[strlenW(tmpBuf)-1] != '\\') { - strcatW(tmpBuf, szwSlash); + if( PathFileExistsW(tmpBuf) ) { + /* initdir oes not have to be a directory. If a file is + * specified, the dir part is taken */ + if( PathIsDirectoryW(tmpBuf)) { + if (tmpBuf[strlenW(tmpBuf)-1] != '\\') { + strcatW(tmpBuf, szwSlash); + } + strcatW(tmpBuf, szwStar); + } + result = GetFullPathNameW(tmpBuf, MAX_PATH, tmpBuf2, &nameBit); + if (result) { + *nameBit = 0x00; + if (fodInfos->initdir) + MemFree(fodInfos->initdir); + fodInfos->initdir = MemAlloc((strlenW(tmpBuf2) + 1)*sizeof(WCHAR)); + strcpyW(fodInfos->initdir, tmpBuf2); + handledPath = TRUE; + TRACE("Value in InitDir changed to %s\n", debugstr_w(fodInfos->initdir)); + } } - strcatW(tmpBuf, szwStar); - result = GetFullPathNameW(tmpBuf, MAX_PATH, tmpBuf2, &nameBit); - if (result) { - *nameBit = 0x00; - if (fodInfos->initdir) - MemFree(fodInfos->initdir); - fodInfos->initdir = MemAlloc((strlenW(tmpBuf2) + 1)*sizeof(WCHAR)); - strcpyW(fodInfos->initdir, tmpBuf2); - handledPath = TRUE; - TRACE("Value in InitDir changed to %s\n", debugstr_w(fodInfos->initdir)); + else if (fodInfos->initdir) + { + MemFree(fodInfos->initdir); + fodInfos->initdir = NULL; + TRACE("Value in InitDir is not an existing path, changed to (nil)\n"); } } }