diff src/process-nt.c @ 298:70ad99077275 r21-0b47

Import from CVS: tag r21-0b47
author cvs
date Mon, 13 Aug 2007 10:39:40 +0200
parents c9fe270a4101
children afd57c14dfc8
line wrap: on
line diff
--- a/src/process-nt.c	Mon Aug 13 10:38:47 2007 +0200
+++ b/src/process-nt.c	Mon Aug 13 10:39:40 2007 +0200
@@ -438,8 +438,23 @@
   {
     /* SHGetFileInfo tends to return ERROR_FILE_NOT_FOUND on most
        errors. This leads to bogus error message. */
-    DWORD image_type = SHGetFileInfo ((char *)XSTRING_DATA (program), 0,NULL,
-				      0, SHGFI_EXETYPE);
+    DWORD image_type;
+    char *p = strrchr ((char *)XSTRING_DATA (program), '.');
+    if (p != NULL &&
+	(stricmp (p, ".exe") == 0 ||
+	 stricmp (p, ".com") == 0 ||
+	 stricmp (p, ".bat") == 0 ||
+	 stricmp (p, ".cmd") == 0))
+      {
+	image_type = SHGetFileInfo ((char *)XSTRING_DATA (program), 0,NULL,
+				    0, SHGFI_EXETYPE);
+      }
+    else
+      {
+	char progname[MAX_PATH];
+	sprintf (progname, "%s.exe", (char *)XSTRING_DATA (program));
+	image_type = SHGetFileInfo (progname, 0, NULL, 0, SHGFI_EXETYPE);
+      }
     if (image_type == 0)
       signal_cannot_launch (program, (GetLastError () == ERROR_FILE_NOT_FOUND
 				      ? ERROR_BAD_FORMAT : GetLastError ()));