* posix/Makefile (tests): Add tst-execvp4.
	* posix/tst-execvp4.c: New file.

2005-07-24  Jakub Jelinek  <jakub@redhat.com>

	[BZ #1125]
	* posix/execvp.c (execvp): Change path_malloc to
	char *, free that pointer on failure.

-2005-07-24  Ulrich Drepper  <drepper@redhat.com>
This commit is contained in:
Ulrich Drepper 2005-07-24 21:41:49 +00:00
parent c226340858
commit 0fee522db1
4 changed files with 51 additions and 7 deletions

View file

@ -1,5 +1,16 @@
2005-07-24 Ulrich Drepper <drepper@redhat.com>
* posix/Makefile (tests): Add tst-execvp4.
* posix/tst-execvp4.c: New file.
2005-07-24 Jakub Jelinek <jakub@redhat.com>
[BZ #1125]
* posix/execvp.c (execvp): Change path_malloc to
char *, free that pointer on failure.
-2005-07-24 Ulrich Drepper <drepper@redhat.com>
* 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.

View file

@ -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

View file

@ -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). */

35
posix/tst-execvp4.c Normal file
View file

@ -0,0 +1,35 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
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"