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