diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | posix/Makefile | 4 | ||||
-rw-r--r-- | posix/execvp.c | 4 | ||||
-rw-r--r-- | posix/tst-execvp3.c | 42 |
4 files changed, 54 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 5aafdd156b..cedc4c012e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-04-14 Ulrich Drepper <drepper@redhat.com> + + * posix/execvp.c (execvp): Use file name including path when + trying to run it with shell. + * posix/Makefile: Add rules to build and run tst-execvp3. + * posix/tst-execvp3.c: New file. + 2005-04-12 Ulrich Drepper <drepper@redhat.com> * stdlib/random_r.c (__initstate_r): Don't use non-existing state. diff --git a/posix/Makefile b/posix/Makefile index 5100cf6bea..d309b3b2de 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -86,7 +86,8 @@ tests := tstgetopt testfnm runtests runptests \ tst-getaddrinfo2 bug-glob1 bug-glob2 tst-sysconf \ tst-execvp1 tst-execvp2 tst-execlp1 tst-execlp2 \ tst-execv1 tst-execv2 tst-execl1 tst-execl2 \ - tst-execve1 tst-execve2 tst-execle1 tst-execle2 + tst-execve1 tst-execve2 tst-execle1 tst-execle2 \ + tst-execvp3 xtests := bug-ga2 ifeq (yes,$(build-shared)) test-srcs := globtest @@ -190,6 +191,7 @@ tst-rxspencer-ENV = LOCPATH=$(common-objpfx)localedata tst-pcre-ARGS = PCRE.tests tst-boost-ARGS = BOOST.tests bug-glob1-ARGS = "$(objpfx)" +tst-execvp3-ARGS = --test-dir=$(objpfx) testcases.h: TESTS TESTS2C.sed sed -f TESTS2C.sed < $< > $@T diff --git a/posix/execvp.c b/posix/execvp.c index 0abfa7007c..6f4e4b8566 100644 --- a/posix/execvp.c +++ b/posix/execvp.c @@ -133,14 +133,14 @@ execvp (file, argv) else startp = (char *) memcpy (name - (p - path), path, p - path); - /* Try to execute this name. If it works, execv will not return. */ + /* Try to execute this name. If it works, execve will not return. */ __execve (startp, argv, __environ); if (errno == ENOEXEC) { if (script_argv == NULL) { - script_argv = allocate_scripts_argv (file, argv); + script_argv = allocate_scripts_argv (startp, argv); if (script_argv == NULL) { /* A possible EACCES error is not as important as diff --git a/posix/tst-execvp3.c b/posix/tst-execvp3.c new file mode 100644 index 0000000000..5ebc87952d --- /dev/null +++ b/posix/tst-execvp3.c @@ -0,0 +1,42 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void do_prepare (void); +#define PREPARE(argc, argv) do_prepare () +static int do_test (void); +#define TEST_FUNCTION do_test () + +#include "../test-skeleton.c" + + +static char *fname; + +static void +do_prepare (void) +{ + int fd = create_temp_file ("testscript", &fname); + dprintf (fd, "echo foo\n"); + fchmod (fd, 0700); + close (fd); +} + + +static int +do_test (void) +{ + if (setenv ("PATH", test_dir, 1) != 0) + { + puts ("setenv failed"); + return 1; + } + + char *argv[] = { fname, NULL }; + execvp (basename (fname), argv); + + /* If we come here, the execvp call failed. */ + return 1; +} |