Mercurial > hg > xemacs-beta
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 ()));