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