Minix1.5/test/test2.c

Compare this file to the similar file:
Show the results in this format:

/* test 2 */

#include <stdio.h>

extern errno;
int kk = 0;

char buf[2048];
main()
{
  int i;

  printf("Test  2 ");
  fflush(stdout);		/* have to flush for child's benefit */

  for (i = 0; i < 19; i++) {
	test20();
  }
  printf("ok\n");
  exit(0);
}


test20()
{
/* Test pipes */

  int fd[2];
  int n, i, j, ij, q = 0, nn, m = 0, k;

  if (pipe(fd) < 0) {
	printf("pipe error.  errno= %d\n", errno);
	exit(0);
  }
  i = fork();
  if (i < 0) {
	printf("fork failed\n");
	exit(0);
  }
  if (i != 0) {
	/* Parent code */
	close(fd[0]);
	for (i = 0; i < 2048; i++) buf[i] = i & 0377;
	for (q = 0; q < 8; q++) {
		if (write(fd[1], buf, 2048) < 0) {
			printf("write pipe err.  errno=%d\n", errno);
			exit(0);
		}
	}
	close(fd[1]);
	wait(&q);
	if (q != 256 * 58) {
		printf("wrong exit code %d\n", q);
		exit(0);
	}
  } else {
	/* Child code */
	close(fd[1]);
	for (q = 0; q < 32; q++) {
		n = read(fd[0], buf, 512);
		if (n != 512) {
			printf("read yielded %d bytes, not 512\n", n);
			exit(0);
		}
		for (j = 0; j < n; j++)
			if ((buf[j] & 0377) != (kk & 0377)) {
				printf("wrong data: %d %d %d \n ", j, buf[j] & 0377, kk & 0377);
			} else {
				kk++;
			}
	}
	exit(58);
  }
}