Home | History | Annotate | Download | only in solaris
      1 /* Test that an error from posix_spawn() is correctly propagated to the
      2    parent. */
      3 
      4 #include <errno.h>
      5 #include <stdio.h>
      6 #include <stdlib.h>
      7 #include <unistd.h>
      8 #include <spawn.h>
      9 
     10 int main(void)
     11 {
     12    int res = 1;
     13    int err;
     14    posix_spawn_file_actions_t file_actions;
     15    char *argv_exe[] = {"true", NULL};
     16    char *envv_exe[] = {NULL};
     17 
     18    err = posix_spawn_file_actions_init(&file_actions);
     19    if (err != 0) {
     20       errno = err;
     21       perror("posix_spawn_file_actions_init");
     22       return 1;
     23    }
     24 
     25    err = posix_spawn_file_actions_adddup2(&file_actions, 3, 4);
     26    if (err != 0) {
     27       errno = err;
     28       perror("posix_spawn_file_actions_adddup2");
     29       goto out;
     30    }
     31 
     32    /* The following call to posix_spawn() should fail because the requested
     33       dup2 action cannot be performed. */
     34    err = posix_spawn(NULL, "/bin/true", &file_actions, NULL, argv_exe,
     35                      envv_exe);
     36    if (err != 0) {
     37       errno = err;
     38       perror("posix_spawn");
     39       goto out;
     40    }
     41 
     42    res = 0;
     43 
     44 out:
     45    err = posix_spawn_file_actions_destroy(&file_actions);
     46    if (err != 0) {
     47       errno = err;
     48       perror("posix_spawn_file_actions_destroy");
     49       res = 1;
     50    }
     51 
     52    return res;
     53 }
     54 
     55