PATCH: fixed spawnlp and added exec variants
Mike Bond
mbond at cox.rr.com
Tue May 22 07:41:33 CDT 2001
Index: msvcrt.spec
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/msvcrt.spec,v
retrieving revision 1.13
diff -u -r1.13 msvcrt.spec
--- msvcrt.spec 2001/05/18 20:58:08 1.13
+++ msvcrt.spec 2001/05/22 13:41:15
@@ -211,14 +211,14 @@
@ cdecl _errno() MSVCRT__errno
@ cdecl _except_handler2(ptr ptr ptr ptr) _except_handler2
@ cdecl _except_handler3(ptr ptr ptr ptr) _except_handler3
-@ stub _execl #(str str) varargs
+@ varargs _execl(str str) _execl
@ stub _execle #(str str) varargs
-@ stub _execlp #(str str) varargs
+@ varargs _execlp(str str) _execlp
@ stub _execlpe #(str str) varargs
-@ stub _execv #(str str)
-@ stub _execve #(str str str)
-@ stub _execvp #(str str)
-@ stub _execvpe #(str str str)
+@ cdecl _execv(str str) _execv
+@ cdecl _execve(str str str) _execve
+@ cdecl _execvp(str str) _execvp
+@ cdecl _execvpe(str str str) _execvpe
@ cdecl _exit(long) MSVCRT__exit
@ cdecl _expand(ptr long) _expand
@ cdecl _fcloseall() _fcloseall
Index: process.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/process.c,v
retrieving revision 1.6
diff -u -r1.6 process.c
--- process.c 2001/05/18 20:58:08 1.6
+++ process.c 2001/05/22 13:41:15
@@ -182,6 +182,84 @@
}
/*********************************************************************
+ * _execl (MSVCRT.@)
+ */
+int _execl(const char* name, const char* arg0, ...)
+{
+ va_list ap;
+ char * args;
+ int ret;
+
+ va_start(ap, arg0);
+ args = msvcrt_valisttos(arg0, ap, ' ');
+ va_end(ap);
+
+ ret = msvcrt_spawn(_P_OVERLAY, name, args, NULL);
+ MSVCRT_free(args);
+
+ return ret;
+}
+
+/*********************************************************************
+ * _execlp (MSVCRT.@)
+ */
+int _execlp(const char* name, const char* arg0, ...)
+{
+ va_list ap;
+ char * args;
+ int ret;
+ char fullname[MAX_PATH];
+
+ _searchenv(name, "PATH", fullname);
+
+ va_start(ap, arg0);
+ args = msvcrt_valisttos(arg0, ap, ' ');
+ va_end(ap);
+
+ ret = msvcrt_spawn(_P_OVERLAY, fullname[0] ? fullname : name, args, NULL);
+ MSVCRT_free(args);
+
+ return ret;
+}
+
+/*********************************************************************
+ * _execv (MSVCRT.@)
+ */
+int _execv(const char* name, char* const* argv)
+{
+ return _spawnve(_P_OVERLAY, name, (const char* const*) argv, NULL);
+}
+
+/*********************************************************************
+ * _execve (MSVCRT.@)
+ */
+int _execve(const char* name, char* const* argv, const char* const* envv)
+{
+ return _spawnve(_P_OVERLAY, name, (const char* const*) argv, envv);
+}
+
+/*********************************************************************
+ * _execvpe (MSVCRT.@)
+ */
+int _execvpe(const char* name, char* const* argv, const char* const* envv)
+{
+ int ret;
+ char fullname[MAX_PATH];
+
+ _searchenv(name, "PATH", fullname);
+ return _spawnve(_P_OVERLAY, fullname[0] ? fullname : name,
+ (const char* const*) argv, envv);
+}
+
+/*********************************************************************
+ * _execvp (MSVCRT.@)
+ */
+int _execvp(const char* name, char* const* argv)
+{
+ return _execvpe(name, argv, NULL);
+}
+
+/*********************************************************************
* _spawnl (MSVCRT.@)
*/
int _spawnl(int flags, const char* name, const char* arg0, ...)
@@ -201,7 +279,7 @@
}
/*********************************************************************
- * _spawnl (MSVCRT.@)
+ * _spawnlp (MSVCRT.@)
*/
int _spawnlp(int flags, const char* name, const char* arg0, ...)
{
@@ -216,7 +294,7 @@
args = msvcrt_valisttos(arg0, ap, ' ');
va_end(ap);
- ret = msvcrt_spawn(flags, name, args, NULL);
+ ret = msvcrt_spawn(flags, fullname[0] ? fullname : name, args, NULL);
MSVCRT_free(args);
return ret;
More information about the wine-patches
mailing list