diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-12-21 15:16:28 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-12-21 15:16:28 +0000 |
commit | 6d63272b5312cd145f034ccd573f275d2ea7ecc2 (patch) | |
tree | 3810fc0a3e2b3cba2ad8377333de76db72640366 | |
parent | b2d6e5dfd3641b3cd1ffab814faa5f90b58a34c1 (diff) | |
download | cygnal-6d63272b5312cd145f034ccd573f275d2ea7ecc2.tar.gz cygnal-6d63272b5312cd145f034ccd573f275d2ea7ecc2.tar.bz2 cygnal-6d63272b5312cd145f034ccd573f275d2ea7ecc2.zip |
* exec.cc (execvp): Call find_exec with FE_NNF flag to enforce
a NULL return when executable isn't found in $PATH. Convert NULL
to "".
(execvpe): Ditto.
* spawn.cc (spawn_guts): Return with EFAULT if prog_arg is NULL.
Return with ENOENT if prog_arg is empty string. Add a comment.
-rw-r--r-- | winsup/cygwin/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/cygwin/exec.cc | 4 | ||||
-rw-r--r-- | winsup/cygwin/spawn.cc | 9 |
3 files changed, 19 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 50b473988..77bc8618f 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2009-12-21 Corinna Vinschen <corinna@vinschen.de> + + * exec.cc (execvp): Call find_exec with FE_NNF flag to enforce + a NULL return when executable isn't found in $PATH. Convert NULL + to "". + (execvpe): Ditto. + * spawn.cc (spawn_guts): Return with EFAULT if prog_arg is NULL. + Return with ENOENT if prog_arg is empty string. Add a comment. + 2009-12-21 Thomas Wolff <towo@towo.net> * fhandler_console.cc (get_nonascii_key): Generate ESC prefix diff --git a/winsup/cygwin/exec.cc b/winsup/cygwin/exec.cc index 131439fbc..b1fd52783 100644 --- a/winsup/cygwin/exec.cc +++ b/winsup/cygwin/exec.cc @@ -86,14 +86,14 @@ extern "C" int execvp (const char *path, char * const *argv) { path_conv buf; - return execv (find_exec (path, buf), argv); + return execv (find_exec (path, buf, "PATH=", FE_NNF) ?: "", argv); } extern "C" int execvpe (const char *path, char * const *argv, char *const *envp) { path_conv buf; - return execve (find_exec (path, buf), argv, envp); + return execve (find_exec (path, buf, "PATH=", FE_NNF) ?: "", argv, envp); } extern "C" int diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 928499614..fdbab76aa 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -281,12 +281,19 @@ spawn_guts (const char *prog_arg, const char *const *argv, if (prog_arg == NULL) { syscall_printf ("prog_arg is NULL"); - set_errno (EINVAL); + set_errno (EFAULT); /* As on Linux. */ + return -1; + } + if (!prog_arg[0]) + { + syscall_printf ("prog_arg is empty"); + set_errno (ENOENT); /* Per POSIX */ return -1; } syscall_printf ("spawn_guts (%d, %.9500s)", mode, prog_arg); + /* FIXME: This is no error condition on Linux. */ if (argv == NULL) { syscall_printf ("argv is NULL"); |