diff options
author | Roland McGrath <roland@gnu.org> | 2005-02-26 02:12:07 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2005-02-26 02:12:07 +0000 |
commit | a873f007cffea32297d52e8f0b19f5981a4e23b4 (patch) | |
tree | 91bf845e7c044e95cc27b433b0c5c652068dd0df /posix | |
parent | 4d0ac7b9463ba779778bfdbaa84632b635866ae8 (diff) |
Updated to fedora-glibc-2_3-20050226T0141
Diffstat (limited to 'posix')
-rw-r--r-- | posix/Makefile | 5 | ||||
-rw-r--r-- | posix/execvp.c | 2 | ||||
-rw-r--r-- | posix/tst-execl1.c | 22 | ||||
-rw-r--r-- | posix/tst-execl2.c | 58 | ||||
-rw-r--r-- | posix/tst-execle1.c | 22 | ||||
-rw-r--r-- | posix/tst-execle2.c | 58 | ||||
-rw-r--r-- | posix/tst-execlp1.c | 34 | ||||
-rw-r--r-- | posix/tst-execlp2.c | 82 | ||||
-rw-r--r-- | posix/tst-execv1.c | 22 | ||||
-rw-r--r-- | posix/tst-execv2.c | 60 | ||||
-rw-r--r-- | posix/tst-execve1.c | 23 | ||||
-rw-r--r-- | posix/tst-execve2.c | 61 | ||||
-rw-r--r-- | posix/tst-execvp1.c | 34 | ||||
-rw-r--r-- | posix/tst-execvp2.c | 82 | ||||
-rw-r--r-- | posix/unistd.h | 2 |
15 files changed, 564 insertions, 3 deletions
diff --git a/posix/Makefile b/posix/Makefile index 2a6f737165..4fa8fb7c19 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -83,7 +83,10 @@ tests := tstgetopt testfnm runtests runptests \ tst-nice tst-nanosleep tst-regex2 \ transbug tst-rxspencer tst-pcre tst-boost \ bug-ga1 tst-vfork1 tst-vfork2 tst-waitid \ - tst-getaddrinfo2 bug-glob1 bug-glob2 tst-sysconf + 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 xtests := bug-ga2 ifeq (yes,$(build-shared)) test-srcs := globtest diff --git a/posix/execvp.c b/posix/execvp.c index a79d4a89c5..9809769701 100644 --- a/posix/execvp.c +++ b/posix/execvp.c @@ -189,7 +189,7 @@ execvp (file, argv) __set_errno (EACCES); free (script_argv); - free (name); + free (name - pathlen); if (path_malloc) free (path); } diff --git a/posix/tst-execl1.c b/posix/tst-execl1.c new file mode 100644 index 0000000000..1cfa36df12 --- /dev/null +++ b/posix/tst-execl1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + static const char prog[] = "does-not-exist"; + errno = 0; + execl (prog, prog, NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execl2.c b/posix/tst-execl2.c new file mode 100644 index 0000000000..5b74959ef8 --- /dev/null +++ b/posix/tst-execl2.c @@ -0,0 +1,58 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + errno = 0; + execl (copy, copy, NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execle1.c b/posix/tst-execle1.c new file mode 100644 index 0000000000..adea0a8d46 --- /dev/null +++ b/posix/tst-execle1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + static const char prog[] = "does-not-exist"; + errno = 0; + execle (prog, prog, NULL, "FOO=BAR", NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execle2.c b/posix/tst-execle2.c new file mode 100644 index 0000000000..fb9b09b423 --- /dev/null +++ b/posix/tst-execle2.c @@ -0,0 +1,58 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + errno = 0; + execle (copy, copy, NULL, "FOO=BAR", NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execlp1.c b/posix/tst-execlp1.c new file mode 100644 index 0000000000..1be4dbcb1b --- /dev/null +++ b/posix/tst-execlp1.c @@ -0,0 +1,34 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *cwd = get_current_dir_name (); + if (cwd == NULL) + { + puts ("get_current_dir_name failed"); + return 1; + } + + /* Make sure we do not find a binary with the name we are going to + use. */ + setenv ("PATH", cwd, 1); + + static const char prog[] = "does-not-exist"; + errno = 0; + execlp (prog, prog, NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execlp2.c b/posix/tst-execlp2.c new file mode 100644 index 0000000000..81a723dda4 --- /dev/null +++ b/posix/tst-execlp2.c @@ -0,0 +1,82 @@ +#include <errno.h> +#include <libgen.h> +#undef basename +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + /* Make sure we do not find a binary with the name we are going to + use. */ + char *bindir = strdupa (copy); + bindir = canonicalize_file_name (dirname (bindir)); + if (bindir == NULL) + { + puts ("canonicalize_file_name failed"); + return 1; + } + char *path; + asprintf (&path, "%s:../libio:../elf", bindir); + if (path == NULL) + { + puts ("asprintf failed"); + return 1; + } + + setenv ("PATH", path, 1); + + char *prog = basename (copy); + errno = 0; + execlp (prog, prog, NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execv1.c b/posix/tst-execv1.c new file mode 100644 index 0000000000..57ed1add6e --- /dev/null +++ b/posix/tst-execv1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *argv[] = { (char *) "does-not-exist", NULL }; + errno = 0; + execv (argv[0], argv); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execv2.c b/posix/tst-execv2.c new file mode 100644 index 0000000000..a5168a269c --- /dev/null +++ b/posix/tst-execv2.c @@ -0,0 +1,60 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + char *argv[] = { copy, NULL }; + + errno = 0; + execv (copy, argv); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execve1.c b/posix/tst-execve1.c new file mode 100644 index 0000000000..356610f635 --- /dev/null +++ b/posix/tst-execve1.c @@ -0,0 +1,23 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *argv[] = { (char *) "does-not-exist", NULL }; + char *envp[] = { (char *) "FOO=BAR", NULL }; + errno = 0; + execve (argv[0], argv, envp); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execve2.c b/posix/tst-execve2.c new file mode 100644 index 0000000000..1a804e94fd --- /dev/null +++ b/posix/tst-execve2.c @@ -0,0 +1,61 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + char *argv[] = { copy, NULL }; + char *envp[] = { (char *) "FOO=BAR", NULL }; + + errno = 0; + execve (copy, argv, envp); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execvp1.c b/posix/tst-execvp1.c new file mode 100644 index 0000000000..ecc673d124 --- /dev/null +++ b/posix/tst-execvp1.c @@ -0,0 +1,34 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *cwd = get_current_dir_name (); + if (cwd == NULL) + { + puts ("get_current_dir_name failed"); + return 1; + } + + /* Make sure we do not find a binary with the name we are going to + use. */ + setenv ("PATH", cwd, 1); + + char *argv[] = { (char *) "does-not-exist", NULL }; + errno = 0; + execvp (argv[0], argv); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execvp2.c b/posix/tst-execvp2.c new file mode 100644 index 0000000000..7e0f5d882c --- /dev/null +++ b/posix/tst-execvp2.c @@ -0,0 +1,82 @@ +#include <errno.h> +#include <libgen.h> +#undef basename +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + /* Make sure we do not find a binary with the name we are going to + use. */ + char *bindir = strdupa (copy); + bindir = canonicalize_file_name (dirname (bindir)); + if (bindir == NULL) + { + puts ("canonicalize_file_name failed"); + return 1; + } + char *path; + asprintf (&path, "%s:../libio:../elf", bindir); + if (path == NULL) + { + puts ("asprintf failed"); + return 1; + } + + setenv ("PATH", path, 1); + + char *argv[] = { basename (copy), NULL }; + errno = 0; + execvp (argv[0], argv); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/unistd.h b/posix/unistd.h index bf66f7543a..aa568dc93a 100644 --- a/posix/unistd.h +++ b/posix/unistd.h @@ -728,7 +728,7 @@ extern int ttyslot (void) __THROW; extern int link (__const char *__from, __const char *__to) __THROW __nonnull ((1, 2)); -#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K /* Make a symbolic link to FROM named TO. */ extern int symlink (__const char *__from, __const char *__to) __THROW __nonnull ((1, 2)); |