// 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 <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * Run ./process_test <outstream> <echocount> <exitcode> <crash>
 * <outstream>: 0 = stdout, 1 = stderr, 2 = stdout and stderr
 * <echocount>: program terminates after <echocount> replies
 * <exitcode>: program terminates with exit code <exitcode>
 * <crash>: 0 = program terminates regularly, 1 = program segfaults
 */
int main(int argc, char* argv[]) {
  if (argc != 5) {
    fprintf(stderr,
            "./process_test <outstream> <echocount> <exitcode> <crash>\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]);

  const int kLineSize = 128;
  char line[kLineSize];

  while ((echo_count != echo_counter) &&
         (fgets(line, kLineSize, stdin) != NULL)) {
    if (outstream == 0) {
      fprintf(stdout, "%s", line);
    } else if (outstream == 1) {
      fprintf(stderr, "%s", line);
    } else if (outstream == 2) {
      fprintf(stdout, "%s", line);
      fprintf(stderr, "%s", line);
    }
    echo_counter++;
  }

  if (crash == 1) {
    int* segfault = NULL;
    *segfault = 1;
  }


  return exit_code;
}
