(root)/
glibc-2.38/
posix/
tst-execve2.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    char *argv[] = { copy, NULL };
      45    char *envp[] = { (char *) "FOO=BAR", NULL };
      46  
      47    errno = 0;
      48    execve (copy, argv, envp);
      49  
      50    if (errno != EACCES)
      51      {
      52        printf ("errno = %d (%m), expected EACCES\n", errno);
      53        return 1;
      54      }
      55  
      56    return 0;
      57  }