1 /*===- count.c - The 'count' testing tool ---------------------------------===*\ 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is distributed under the University of Illinois Open Source 6 * License. See LICENSE.TXT for details. 7 * 8 \*===----------------------------------------------------------------------===*/ 9 10 #include <stdlib.h> 11 #include <stdio.h> 12 13 int main(int argc, char **argv) { 14 unsigned Count, NumLines, NumRead; 15 char Buffer[4096], *End; 16 17 if (argc != 2) { 18 fprintf(stderr, "usage: %s <expected line count>\n", argv[0]); 19 return 2; 20 } 21 22 Count = strtol(argv[1], &End, 10); 23 if (*End != '\0' && End != argv[1]) { 24 fprintf(stderr, "%s: invalid count argument '%s'\n", argv[0], argv[1]); 25 return 2; 26 } 27 28 NumLines = 0; 29 do { 30 unsigned i; 31 32 NumRead = fread(Buffer, 1, sizeof(Buffer), stdin); 33 34 for (i = 0; i != NumRead; ++i) 35 if (Buffer[i] == '\n') 36 ++NumLines; 37 } while (NumRead == sizeof(Buffer)); 38 39 if (!feof(stdin)) { 40 fprintf(stderr, "%s: error reading stdin\n", argv[0]); 41 return 3; 42 } 43 44 if (Count != NumLines) { 45 fprintf(stderr, "Expected %d lines, got %d.\n", Count, NumLines); 46 return 1; 47 } 48 49 return 0; 50 } 51