Module: wine Branch: refs/heads/master Commit: 508c6e6cf4429311e30b47284ed865b06266091c URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=508c6e6cf4429311e30b4728...
Author: qingdoa daoo qingdao33122@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);