(root)/
glibc-2.38/
posix/
tst-execle2.c
       1  #include <errno.h>
       2  #include <stdio.h>
       3  #include <unistd.h>
       4  #include <sys/stat.h>
       5  
       6  
       7  static void prepare (int argc, char *argv[]);
       8  static int do_test (void);
       9  #define PREPARE(argc, argv) prepare (argc, argv)
      10  #define TEST_FUNCTION do_test ()
      11  #include "../test-skeleton.c"
      12  
      13  
      14  static char *copy;
      15  
      16  static void
      17  prepare (int argc, char *argv[])
      18  {
      19    char *buf;
      20    int off;
      21  
      22    buf = xasprintf ("cp %s %n%s-copy", argv[0], &off, argv[0]);
      23    if (system (buf) != 0)
      24      {
      25        puts ("system  failed");
      26        exit (1);
      27      }
      28  
      29    /* Make it not executable.  */
      30    copy = buf + off;
      31    if (chmod (copy, 0666) != 0)
      32      {
      33        puts ("chmod  failed");
      34        exit (1);
      35      }
      36  
      37    add_temp_file (copy);
      38  }
      39  
      40  
      41  static int
      42  do_test (void)
      43  {
      44    const char *env[] = {"FOO=BAR", NULL};
      45    errno = 0;
      46    execle (copy, copy, NULL, env);
      47  
      48    if (errno != EACCES)
      49      {
      50        printf ("errno = %d (%m), expected EACCES\n", errno);
      51        return 1;
      52      }
      53  
      54    return 0;
      55  }