1#!/bin/sh - 2# 3# $Id: chk.nl,v 12.0 2004/11/17 03:44:43 bostic Exp $ 4# 5# Check to make sure that there are no trailing newlines in __db_err calls. 6 7d=../.. 8 9[ -f $d/README ] || { 10 echo "FAIL: chk.nl can't find the source directory." 11 exit 1 12} 13 14cat << END_OF_CODE > t.c 15#include <sys/types.h> 16 17#include <errno.h> 18#include <stdio.h> 19 20int chk(FILE *, char *); 21 22int 23main(argc, argv) 24 int argc; 25 char *argv[]; 26{ 27 FILE *fp; 28 int exitv; 29 30 for (exitv = 0; *++argv != NULL;) { 31 if ((fp = fopen(*argv, "r")) == NULL) { 32 fprintf(stderr, "%s: %s\n", *argv, strerror(errno)); 33 return (1); 34 } 35 if (chk(fp, *argv)) 36 exitv = 1; 37 (void)fclose(fp); 38 } 39 return (exitv); 40} 41 42int 43chk(fp, name) 44 FILE *fp; 45 char *name; 46{ 47 int ch, exitv, line, q; 48 49 exitv = 0; 50 for (ch = 'a', line = 1;;) { 51 if ((ch = getc(fp)) == EOF) 52 return (exitv); 53 if (ch == '\n') { 54 ++line; 55 continue; 56 } 57 if (!isspace(ch)) continue; 58 if ((ch = getc(fp)) != '_') continue; 59 if ((ch = getc(fp)) != '_') continue; 60 if ((ch = getc(fp)) != 'd') continue; 61 if ((ch = getc(fp)) != 'b') continue; 62 if ((ch = getc(fp)) != '_') continue; 63 if ((ch = getc(fp)) != 'e') continue; 64 if ((ch = getc(fp)) != 'r') continue; 65 if ((ch = getc(fp)) != 'r') continue; 66 if ((ch = getc(fp)) != '(') continue; 67 while ((ch = getc(fp)) != '"') { 68 if (ch == EOF) 69 return (exitv); 70 if (ch == '\n') 71 ++line; 72 } 73 while ((ch = getc(fp)) != '"') 74 switch (ch) { 75 case EOF: 76 return (exitv); 77 case '\\n': 78 ++line; 79 break; 80 case '.': 81 if ((ch = getc(fp)) != '"') 82 ungetc(ch, fp); 83 else { 84 fprintf(stderr, 85 "%s: <period> at line %d\n", name, line); 86 exitv = 1; 87 } 88 break; 89 case '\\\\': 90 if ((ch = getc(fp)) != 'n') 91 ungetc(ch, fp); 92 else if ((ch = getc(fp)) != '"') 93 ungetc(ch, fp); 94 else { 95 fprintf(stderr, 96 "%s: <newline> at line %d\n", name, line); 97 exitv = 1; 98 } 99 break; 100 } 101 } 102 return (exitv); 103} 104END_OF_CODE 105 106cc t.c -o t 107if ./t $d/*/*.[ch] $d/*/*.cpp $d/*/*.in ; then 108 : 109else 110 echo "FAIL: found __db_err calls ending with periods/newlines." 111 exit 1 112fi 113 114exit 0 115