wine/ tools/winewrap.c tools/winegcc.c include ...
Dimitrie O. Paun
dimi at intelliware.ca
Tue Apr 1 11:39:36 CST 2003
On 1 Apr 2003, Alexandre Julliard wrote:
> If they link with msvcrt then they are not supposed to use
> wine/port.h. To avoid trouble with process.c I'd suggest naming the
> function spawnvp, without the underscore prefix, and making it call
> the real _spawnvp on Windows.
Cool. Here it is again. I'll make use of it as soon as it gets into
the tree.
ChangeLog
Add spawnvp to the portability lib.
Index: include/wine/port.h
===================================================================
RCS file: /var/cvs/wine/include/wine/port.h,v
retrieving revision 1.36
diff -u -r1.36 port.h
--- include/wine/port.h 28 Mar 2003 00:36:13 -0000 1.36
+++ include/wine/port.h 1 Apr 2003 17:24:48 -0000
@@ -211,6 +211,16 @@
ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
#endif /* HAVE_PWRITE */
+#ifndef HAVE__SPAWNVP
+/* Process creation flags */
+#define _P_WAIT 0
+#define _P_NOWAIT 1
+#define _P_OVERLAY 2
+#define _P_NOWAITO 3
+#define _P_DETACH 4
+int spawnvp(int mode, const char *cmdname, char *const argv[]);
+#endif /* HAVE__SPAWNVP */
+
#ifndef HAVE_STATFS
int statfs(const char *name, struct statfs *info);
#endif /* !defined(HAVE_STATFS) */
Index: libs/port/Makefile.in
===================================================================
RCS file: /var/cvs/wine/libs/port/Makefile.in,v
retrieving revision 1.5
diff -u -r1.5 Makefile.in
--- libs/port/Makefile.in 20 Mar 2003 23:44:36 -0000 1.5
+++ libs/port/Makefile.in 1 Apr 2003 05:20:57 -0000
@@ -16,6 +16,7 @@
mkstemps.c \
pread.c \
pwrite.c \
+ spawn.c \
statfs.c \
strcasecmp.c \
strerror.c \
--- /dev/null 2002-08-30 19:31:37.000000000 -0400
+++ libs/port/spawn.c 2003-04-01 12:26:51.000000000 -0500
@@ -0,0 +1,53 @@
+/*
+ * spawnvp function
+ *
+ * Copyright 2003 Dimitrie O. Paun
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <errno.h>
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+int spawnvp(int mode, const char *cmdname, char *const argv[])
+{
+#ifndef HAVE__SPAWNVP
+ int pid = 0, status, wret;
+
+ if (mode != _P_OVERLAY) pid = fork();
+ if (pid == 0) pid = execvp(argv[0], argv);
+ if (pid < 0) return -1;
+
+ if (mode != _P_WAIT) return pid;
+
+ while (pid != (wret = waitpid(pid, &status, 0)))
+ if (wret == -1 && errno != EINTR) break;
+
+ if (pid == wret && WIFEXITED(status)) return WEXITSTATUS(status);
+
+ return 255; /* abnormal exit with an abort or an interrupt */
+#else /* HAVE__SPAWNVP */
+ return _spawnvp(mode, cmdname, argv);
+#endif /* HAVE__SPAWNVP */
+}
--
Dimi.
More information about the wine-patches
mailing list