From 0fee522db1412106381ebd2ad6803c07e033a271 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 24 Jul 2005 21:41:49 +0000 Subject: [PATCH] [BZ #1125] * posix/Makefile (tests): Add tst-execvp4. * posix/tst-execvp4.c: New file. 2005-07-24 Jakub Jelinek [BZ #1125] * posix/execvp.c (execvp): Change path_malloc to char *, free that pointer on failure. -2005-07-24 Ulrich Drepper --- ChangeLog | 11 +++++++++++ posix/Makefile | 2 +- posix/execvp.c | 10 ++++------ posix/tst-execvp4.c | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 posix/tst-execvp4.c diff --git a/ChangeLog b/ChangeLog index fb9d21a..02a4714 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2005-07-24 Ulrich Drepper + * posix/Makefile (tests): Add tst-execvp4. + * posix/tst-execvp4.c: New file. + +2005-07-24 Jakub Jelinek + + [BZ #1125] + * posix/execvp.c (execvp): Change path_malloc to + char *, free that pointer on failure. + +-2005-07-24 Ulrich Drepper + * wcsmbs/bits/wchar2.h: Use __FILE not FILE. * wcsmbs/Makefile: Add rules to build and run tst-wchar-h. * wcsmbs/tst-wchar-h.c: New file. diff --git a/posix/Makefile b/posix/Makefile index d309b3b..39b078c 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -87,7 +87,7 @@ tests := tstgetopt testfnm runtests runptests \ 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-execvp3 + tst-execvp3 tst-execvp4 xtests := bug-ga2 ifeq (yes,$(build-shared)) test-srcs := globtest diff --git a/posix/execvp.c b/posix/execvp.c index 6f4e4b8..8421bd0 100644 --- a/posix/execvp.c +++ b/posix/execvp.c @@ -88,7 +88,7 @@ execvp (file, argv) else { char *path = getenv ("PATH"); - bool path_malloc = false; + char *path_malloc = NULL; if (path == NULL) { /* There is no `PATH' in the environment. @@ -100,7 +100,7 @@ execvp (file, argv) return -1; path[0] = ':'; (void) confstr (_CS_PATH, path + 1, len); - path_malloc = true; + path_malloc = path; } size_t len = strlen (file) + 1; @@ -108,8 +108,7 @@ execvp (file, argv) char *name = malloc (pathlen + len + 1); if (name == NULL) { - if (path_malloc) - free (path); + free (path_malloc); return -1; } /* Copy the file name at the top. */ @@ -190,8 +189,7 @@ execvp (file, argv) free (script_argv); free (name - pathlen); - if (path_malloc) - free (path); + free (path_malloc); } /* Return the error from the last attempt (probably ENOENT). */ diff --git a/posix/tst-execvp4.c b/posix/tst-execvp4.c new file mode 100644 index 0000000..531fab2 --- /dev/null +++ b/posix/tst-execvp4.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include +#include + +static int +do_test (void) +{ + char buf[40] = "/usr/bin/does-not-exist"; + size_t stemlen = strlen (buf); + struct stat64 st; + int cnt = 0; + while (stat64 (buf, &st) != -1 || errno != ENOENT + || stat64 (buf + 4, &st) != -1 || errno != ENOENT) + { + if (cnt++ == 100) + { + puts ("cannot find a unique file name"); + return 0; + } + + strcpy (buf + stemlen, ".XXXXXX"); + mktemp (buf); + } + + unsetenv ("PATH"); + char *argv[] = { buf + 9, NULL }; + execvp (argv[0], argv); + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" -- 2.7.4