Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/exec.cc4
-rw-r--r--winsup/cygwin/spawn.cc9
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");