mirror of git://sourceware.org/git/glibc.git
[BZ #1125]
* 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:
parent
c226340858
commit
0fee522db1
11
ChangeLog
11
ChangeLog
|
|
@ -1,5 +1,16 @@
|
||||||
2005-07-24 Ulrich Drepper <drepper@redhat.com>
|
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/bits/wchar2.h: Use __FILE not FILE.
|
||||||
* wcsmbs/Makefile: Add rules to build and run tst-wchar-h.
|
* wcsmbs/Makefile: Add rules to build and run tst-wchar-h.
|
||||||
* wcsmbs/tst-wchar-h.c: New file.
|
* wcsmbs/tst-wchar-h.c: New file.
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ tests := tstgetopt testfnm runtests runptests \
|
||||||
tst-execvp1 tst-execvp2 tst-execlp1 tst-execlp2 \
|
tst-execvp1 tst-execvp2 tst-execlp1 tst-execlp2 \
|
||||||
tst-execv1 tst-execv2 tst-execl1 tst-execl2 \
|
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
|
tst-execvp3 tst-execvp4
|
||||||
xtests := bug-ga2
|
xtests := bug-ga2
|
||||||
ifeq (yes,$(build-shared))
|
ifeq (yes,$(build-shared))
|
||||||
test-srcs := globtest
|
test-srcs := globtest
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ execvp (file, argv)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *path = getenv ("PATH");
|
char *path = getenv ("PATH");
|
||||||
bool path_malloc = false;
|
char *path_malloc = NULL;
|
||||||
if (path == NULL)
|
if (path == NULL)
|
||||||
{
|
{
|
||||||
/* There is no `PATH' in the environment.
|
/* There is no `PATH' in the environment.
|
||||||
|
|
@ -100,7 +100,7 @@ execvp (file, argv)
|
||||||
return -1;
|
return -1;
|
||||||
path[0] = ':';
|
path[0] = ':';
|
||||||
(void) confstr (_CS_PATH, path + 1, len);
|
(void) confstr (_CS_PATH, path + 1, len);
|
||||||
path_malloc = true;
|
path_malloc = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len = strlen (file) + 1;
|
size_t len = strlen (file) + 1;
|
||||||
|
|
@ -108,8 +108,7 @@ execvp (file, argv)
|
||||||
char *name = malloc (pathlen + len + 1);
|
char *name = malloc (pathlen + len + 1);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
{
|
{
|
||||||
if (path_malloc)
|
free (path_malloc);
|
||||||
free (path);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* Copy the file name at the top. */
|
/* Copy the file name at the top. */
|
||||||
|
|
@ -190,8 +189,7 @@ execvp (file, argv)
|
||||||
|
|
||||||
free (script_argv);
|
free (script_argv);
|
||||||
free (name - pathlen);
|
free (name - pathlen);
|
||||||
if (path_malloc)
|
free (path_malloc);
|
||||||
free (path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the error from the last attempt (probably ENOENT). */
|
/* Return the error from the last attempt (probably ENOENT). */
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
Loading…
Reference in New Issue