#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; }