Let CreateProcess launch unix executable without a .exe extension.
Fixed arguments passed when creating a unix process.
This commit is contained in:
parent
0045def764
commit
394203f68c
|
@ -680,8 +680,6 @@ static BOOL MODULE_CreateUnixProcess( LPCSTR filename, LPCSTR lpCmdLine,
|
||||||
LPPROCESS_INFORMATION lpProcessInfo,
|
LPPROCESS_INFORMATION lpProcessInfo,
|
||||||
BOOL useWine )
|
BOOL useWine )
|
||||||
{
|
{
|
||||||
DOS_FULL_NAME full_name;
|
|
||||||
const char *unixfilename = filename;
|
|
||||||
const char *argv[256], **argptr;
|
const char *argv[256], **argptr;
|
||||||
char *cmdline = NULL;
|
char *cmdline = NULL;
|
||||||
BOOL iconic = FALSE;
|
BOOL iconic = FALSE;
|
||||||
|
@ -694,18 +692,19 @@ static BOOL MODULE_CreateUnixProcess( LPCSTR filename, LPCSTR lpCmdLine,
|
||||||
iconic = TRUE;
|
iconic = TRUE;
|
||||||
|
|
||||||
/* Build argument list */
|
/* Build argument list */
|
||||||
|
|
||||||
argptr = argv;
|
argptr = argv;
|
||||||
if ( !useWine )
|
if ( !useWine )
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
const char *unixfilename = filename;
|
||||||
|
DOS_FULL_NAME full_name;
|
||||||
|
|
||||||
p = cmdline = strdup(lpCmdLine);
|
p = cmdline = strdup(lpCmdLine);
|
||||||
if (strchr(filename, '/') || strchr(filename, ':') || strchr(filename, '\\'))
|
if (strchr(filename, '/') || strchr(filename, ':') || strchr(filename, '\\'))
|
||||||
{
|
{
|
||||||
if ( DOSFS_GetFullName( filename, TRUE, &full_name ) )
|
if ( DOSFS_GetFullName( filename, TRUE, &full_name ) )
|
||||||
unixfilename = full_name.long_name;
|
unixfilename = full_name.long_name;
|
||||||
}
|
}
|
||||||
*argptr++ = unixfilename;
|
|
||||||
if (iconic) *argptr++ = "-iconic";
|
if (iconic) *argptr++ = "-iconic";
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -714,6 +713,8 @@ static BOOL MODULE_CreateUnixProcess( LPCSTR filename, LPCSTR lpCmdLine,
|
||||||
*argptr++ = p;
|
*argptr++ = p;
|
||||||
while (*p && *p != ' ' && *p != '\t') p++;
|
while (*p && *p != ' ' && *p != '\t') p++;
|
||||||
}
|
}
|
||||||
|
/* overwrite program name gotten from tidy_cmd */
|
||||||
|
argv[0] = unixfilename;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -936,6 +937,9 @@ static BOOL make_lpCommandLine_name( LPCSTR line, LPSTR name, int namelen,
|
||||||
}
|
}
|
||||||
TRACE("checking if file exists '%s'\n", name);
|
TRACE("checking if file exists '%s'\n", name);
|
||||||
retlen = SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, &lastpart);
|
retlen = SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, &lastpart);
|
||||||
|
if (!retlen)
|
||||||
|
retlen = SearchPathA( NULL, name, NULL, sizeof(buffer), buffer, &lastpart);
|
||||||
|
|
||||||
if ( retlen && (retlen < sizeof(buffer)) ) break;
|
if ( retlen && (retlen < sizeof(buffer)) ) break;
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
|
@ -1009,7 +1013,8 @@ static BOOL make_lpApplicationName_name( LPCSTR line, LPSTR name, int namelen)
|
||||||
break; /* exit if out of input string */
|
break; /* exit if out of input string */
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
if (!SearchPathA( NULL, buffer, ".exe", namelen, name, NULL )) {
|
if (!SearchPathA( NULL, buffer, ".exe", namelen, name, NULL ) &&
|
||||||
|
!SearchPathA( NULL, buffer, NULL, namelen, name, NULL ) ) {
|
||||||
TRACE("file not found '%s'\n", buffer );
|
TRACE("file not found '%s'\n", buffer );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue