FindFirstFile can return an empty short name if the long name is a
valid DOS name, fixed callers to handle that properly.
diff --git a/controls/listbox.c b/controls/listbox.c
index d72ecc3..5c5cca4 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -1766,10 +1766,12 @@
static const WCHAR bracketW[] = { ']',0 };
static const WCHAR dotW[] = { '.',0 };
if (!(attrib & DDL_DIRECTORY) ||
- !strcmpW( entry.cAlternateFileName, dotW )) continue;
+ !strcmpW( entry.cFileName, dotW )) continue;
buffer[0] = '[';
- if (long_names) strcpyW( buffer + 1, entry.cFileName );
- else strcpyW( buffer + 1, entry.cAlternateFileName );
+ if (!long_names && entry.cAlternateFileName[0])
+ strcpyW( buffer + 1, entry.cAlternateFileName );
+ else
+ strcpyW( buffer + 1, entry.cFileName );
strcatW(buffer, bracketW);
}
else /* not a directory */
@@ -1781,8 +1783,10 @@
((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS)))
continue;
#undef ATTRIBS
- if (long_names) strcpyW( buffer, entry.cFileName );
- else strcpyW( buffer, entry.cAlternateFileName );
+ if (!long_names && entry.cAlternateFileName[0])
+ strcpyW( buffer + 1, entry.cAlternateFileName );
+ else
+ strcpyW( buffer + 1, entry.cFileName );
}
if (!long_names) CharLowerW( buffer );
pos = LISTBOX_FindFileStrPos( hwnd, descr, buffer );
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index 545e238..6de718a 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -1578,16 +1578,8 @@
memcpy (pbuff, stffile->cFileName, len);
pbuff += len;
- if (stffile->cAlternateFileName)
- {
- len1 = strlen (stffile->cAlternateFileName)+1;
- memcpy (pbuff, stffile->cAlternateFileName, len1);
- }
- else
- {
- len1 = 1;
- *pbuff = 0x00;
- }
+ len1 = strlen (stffile->cAlternateFileName)+1;
+ memcpy (pbuff, stffile->cAlternateFileName, len1);
pidl = _ILCreate(PT_FOLDER, (LPVOID)buff, len + len1);
@@ -1618,16 +1610,8 @@
memcpy (pbuff, stffile->cFileName, len);
pbuff += len;
- if (stffile->cAlternateFileName)
- {
- len1 = strlen (stffile->cAlternateFileName)+1;
- memcpy (pbuff, stffile->cAlternateFileName, len1);
- }
- else
- {
- len1 = 1;
- *pbuff = 0x00;
- }
+ len1 = strlen (stffile->cAlternateFileName)+1;
+ memcpy (pbuff, stffile->cAlternateFileName, len1);
pidl = _ILCreate(PT_VALUE, (LPVOID)buff, len + len1);
diff --git a/dlls/winedos/int21.c b/dlls/winedos/int21.c
index 13ef7f9..eb5d9b3 100644
--- a/dlls/winedos/int21.c
+++ b/dlls/winedos/int21.c
@@ -3754,7 +3754,8 @@
count++;
/* Check the file attributes, and path */
if (!(entry->dwFileAttributes & ~search_attr) &&
- match_short(entry->cAlternateFileName, mask))
+ match_short(entry->cAlternateFileName[0] ? entry->cAlternateFileName : entry->cFileName,
+ mask))
{
return count;
}
@@ -3787,8 +3788,12 @@
dta->fileattr = entry.dwFileAttributes;
dta->filesize = entry.nFileSizeLow;
FileTimeToDosDateTime( &entry.ftLastWriteTime, &dta->filedate, &dta->filetime );
- WideCharToMultiByte(CP_OEMCP, 0, entry.cAlternateFileName, -1,
- dta->filename, 13, NULL, NULL);
+ if (entry.cAlternateFileName[0])
+ WideCharToMultiByte(CP_OEMCP, 0, entry.cAlternateFileName, -1,
+ dta->filename, 13, NULL, NULL);
+ else
+ WideCharToMultiByte(CP_OEMCP, 0, entry.cFileName, -1, dta->filename, 13, NULL, NULL);
+
if (!memchr(dta->mask,'?',11))
{
/* wildcardless search, release resources in case no findnext will
@@ -3887,7 +3892,10 @@
&pResult->filedate, &pResult->filetime );
/* Convert file name to FCB format */
- INT21_ToDosFCBFormat( entry.cAlternateFileName, nameW );
+ if (entry.cAlternateFileName[0])
+ INT21_ToDosFCBFormat( entry.cAlternateFileName, nameW );
+ else
+ INT21_ToDosFCBFormat( entry.cFileName, nameW );
WideCharToMultiByte(CP_OEMCP, 0, nameW, 11, pResult->filename, 11, NULL, NULL);
return 1;
}