Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Test for exec function.
- Loading branch information
Ulrich Drepper
committed
Feb 23, 2005
1 parent
b17ebef
commit 53e5696
Showing
12 changed files
with
558 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
Oops, something went wrong.