qingdoa daoo : msvcrt: Append extension(.exe) for _spawnve argument.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Apr 6 05:52:54 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 508c6e6cf4429311e30b47284ed865b06266091c
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=508c6e6cf4429311e30b47284ed865b06266091c
Author: qingdoa daoo <qingdao33122 at yahoo.com>
Date: Wed Apr 5 11:37:01 2006 -0700
msvcrt: Append extension(.exe) for _spawnve argument.
---
dlls/msvcrt/process.c | 32 ++++++++++++++++++++++++++++++--
1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/process.c b/dlls/msvcrt/process.c
index 43e1084..a16f8f1 100644
--- a/dlls/msvcrt/process.c
+++ b/dlls/msvcrt/process.c
@@ -442,13 +442,41 @@ MSVCRT_intptr_t _spawnve(int flags, cons
{
char * args = msvcrt_argvtos(argv,' ');
char * envs = msvcrt_argvtos(envv,0);
- const char *fullname = name;
+ char fullname[MAX_PATH];
+ const char *p;
+ int len;
MSVCRT_intptr_t ret = -1;
- FIXME(":not translating name %s to locate program\n",fullname);
TRACE(":call (%s), params (%s), env (%s)\n",debugstr_a(name),debugstr_a(args),
envs?"Custom":"Null");
+ /* no check for NULL name.
+ native doesn't do it */
+
+ p = memchr(name, '\0', MAX_PATH);
+ if( !p )
+ p = name + MAX_PATH - 1;
+ len = p - name;
+
+ /* extra-long names are silently truncated. */
+ memcpy(fullname, name, len);
+
+ for( p--; p >= name; p-- )
+ {
+ if( *p == '\\' || *p == '/' || *p == ':' || *p == '.' )
+ break;
+ }
+
+ /* if no extension is given, assume .exe */
+ if( (p < name || *p != '.') && len <= MAX_PATH - 5 )
+ {
+ FIXME("only trying .exe when no extension given\n");
+ memcpy(fullname+len, ".exe", 4);
+ len += 4;
+ }
+
+ fullname[len] = '\0';
+
if (args)
{
ret = msvcrt_spawn(flags, fullname, args, envs);
More information about the wine-cvs
mailing list