This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
fexecve, execvpe
- From: Eric Blake <ebb9 at byu dot net>
- To: cygwin-patches at cygwin dot com
- Date: Sat, 26 Sep 2009 14:18:00 -0600
- Subject: fexecve, execvpe
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
POSIX requires fexecve, and we had all the pieces ready to go. And to my
surprise, we've had execvpe in the sources for a long time, but just
failed to export it (glibc just added execvpe in 2.10). OK to apply,
along with the corresponding patch to new-features.sgml and tweaking
unistd.h in newlib?
P.S Any reason that "dtable.h" and "cygheap.h" aren't self-contained?
2009-09-26 Eric Blake <ebb9@byu.net>
* exec.cc (fexecve): New function.
* cygwin.din (execvpe, fexecve): Export new fexecve and existing
execvpe.
* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
* posix.sgml: Mention them.
- --
Don't work too hard, make some time for fun as well!
Eric Blake ebb9@byu.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEUEARECAAYFAkq+dvgACgkQ84KuGfSFAYAw3wCePP334FcS28GEkjMge4yz1IOq
4XkAl23iWbcAlOna9F2TmlU65qQ5Zag=
=eR4E
-----END PGP SIGNATURE-----
diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
index bee9cd1..a10d18c 100644
--- a/winsup/cygwin/cygwin.din
+++ b/winsup/cygwin/cygwin.din
@@ -356,6 +356,7 @@ execve SIGFE
_execve = execve SIGFE
execvp SIGFE
_execvp = execvp SIGFE
+execvpe SIGFE
exit = cygwin_exit SIGFE
_exit SIGFE
exp NOSIGFE
@@ -454,6 +455,7 @@ feof SIGFE
_feof = feof SIGFE
ferror SIGFE
_ferror = ferror SIGFE
+fexecve SIGFE
fflush SIGFE
_fflush = fflush SIGFE
ffs NOSIGFE
diff --git a/winsup/cygwin/exec.cc b/winsup/cygwin/exec.cc
index ee0709c..131439f 100644
--- a/winsup/cygwin/exec.cc
+++ b/winsup/cygwin/exec.cc
@@ -1,6 +1,6 @@
/* exec.cc: exec system call support.
- Copyright 1996, 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.
+ Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2009 Red Hat, Inc.
This file is part of Cygwin.
@@ -14,6 +14,10 @@ details. */
#include "cygerrno.h"
#include "path.h"
#include "environ.h"
+#include "sync.h"
+#include "fhandler.h"
+#include "dtable.h"
+#include "cygheap.h"
#undef _execve
/* This is called _execve and not execve because the real execve is defined
@@ -91,3 +95,15 @@ execvpe (const char *path, char * const *argv, char *const *envp)
path_conv buf;
return execve (find_exec (path, buf), argv, envp);
}
+
+extern "C" int
+fexecve (int fd, char * const *argv, char *const *envp)
+{
+ cygheap_fdget cfd (fd);
+ if (cfd < 0)
+ {
+ syscall_printf ("-1 = fexecve (%d, %p, %p)", fd, argv, envp);
+ return -1;
+ }
+ return execve (cfd->pc.get_win32 (), argv, envp);
+}
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index bd05103..a396b1f 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -367,12 +367,13 @@ details. */
211: Export fpurge, mkstemps.
212: Add and export libstdc++ malloc wrappers.
213: Export canonicalize_file_name, eaccess, euidaccess.
+ 214: Export execvpe, fexecve.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 213
+#define CYGWIN_VERSION_API_MINOR 214
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible
diff --git a/winsup/cygwin/posix.sgml b/winsup/cygwin/posix.sgml
index 48dce6c..06e49d2 100644
--- a/winsup/cygwin/posix.sgml
+++ b/winsup/cygwin/posix.sgml
@@ -152,6 +152,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
fdopendir
feof
ferror
+ fexecve
fflush
ffs
fgetc
@@ -1015,6 +1016,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
envz_remove
envz_strip
euidaccess
+ execvpe
exp10
exp10f
fcloseall
@@ -1227,7 +1229,6 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
fesetround
fetestexcept
feupdateenv
- fexecve
floorl
fmal
fmaxl
--
1.6.5.rc1