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;
 }