blob: ea58b92af6097d0e3d3a72e27d2a51d775bd6bb9 [file] [log] [blame]
// RUN: %clang %s -o %t && %run %t 2>&1 | FileCheck %s
//
// Older versions of Android do not have certain posix_spawn* functions.
// UNSUPPORTED: android
#include <assert.h>
#include <spawn.h>
#include <stdio.h>
#include <sys/wait.h>
int main(int argc, char **argv) {
if (argc > 1) {
// CHECK: SPAWNED
// CHECK: SPAWNED
printf("SPAWNED\n");
return 0;
}
posix_spawnattr_t attr = {0};
posix_spawn_file_actions_t file_actions = {0};
char *const args[] = {
argv[0], "2", "3", "4", "2", "3", "4", "2", "3", "4",
"2", "3", "4", "2", "3", "4", "2", "3", "4", NULL,
};
char *const env[] = {
"A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B",
"A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", "A=B", NULL,
};
pid_t pid;
int s = posix_spawn(&pid, argv[0], &file_actions, &attr, args, env);
assert(!s);
waitpid(pid, &s, WUNTRACED | WCONTINUED);
s = posix_spawnp(&pid, argv[0], &file_actions, &attr, args, env);
assert(!s);
waitpid(pid, &s, WUNTRACED | WCONTINUED);
return 0;
}