| #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) |
| { |
| const char *env[] = {"FOO=BAR", NULL}; |
| errno = 0; |
| execle (copy, copy, NULL, env); |
| |
| if (errno != EACCES) |
| { |
| printf ("errno = %d (%m), expected EACCES\n", errno); |
| return 1; |
| } |
| |
| return 0; |
| } |