// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #include #include #include /* * Run ./process_test * : 0 = stdout, 1 = stderr, 2 = stdout and stderr * : program terminates after replies * : program terminates with exit code * : 0 = program terminates regularly, 1 = program segfaults */ int main(int argc, char* argv[]) { if (argc != 5) { fprintf(stderr, "./process_test \n"); exit(1); } int outstream = atoi(argv[1]); if (outstream < 0 || outstream > 2) { fprintf(stderr, "unknown outstream"); exit(1); } int echo_counter = 0; int echo_count = atoi(argv[2]); int exit_code = atoi(argv[3]); int crash = atoi(argv[4]); if (crash == 1) { int* segfault = NULL; *segfault = 1; } const int kLineSize = 128; char line[kLineSize]; while ((echo_count != echo_counter) && (fgets(line, kLineSize, stdin) != NULL)) { if (outstream == 0) { fprintf(stdout, "%s", line); fflush(stdout); } else if (outstream == 1) { fprintf(stderr, "%s", line); fflush(stderr); } else if (outstream == 2) { fprintf(stdout, "%s", line); fprintf(stderr, "%s", line); fflush(stdout); fflush(stderr); } echo_counter++; } return exit_code; }