mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
[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>
|
||||
|
||||
* 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.
|
||||
|
@ -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
|
||||
|
@ -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
35
posix/tst-execvp4.c
Normal 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"
|
Loading…
Reference in New Issue
Block a user