checknr WARNS6 cleanup
Chris Pressey
cpressey at catseye.mine.nu
Tue Feb 1 22:08:59 PST 2005
On Sun, 16 Jan 2005 16:38:50 -0500
Larry Lansing <lansil at xxxxxxxxxxxxx> wrote:
> Makes checknr WARNS6-friendly.
>
> - add WARNS6 to Makefile
> - constify several char * function arguments
> - reindent function declarations
> - rename some local variables to avoid name conflicts with globals
> - use a temporary char * for some strncpy() calls for
> const-correctness - eliminate use of the register keyword
Sorry to drop the ball on these cleanups - I've been busy.
Attached is a refined version of this patch. I'm not really happy about
the malloc()s, but the other alternative is to copy all of br[] and
knowncmds[] into writeable buffers, which isn't very appetizing either.
Thoughts, anyone?
-Chris
Index: usr.bin/checknr/Makefile
===================================================================
RCS file: /home/dcvs/src/usr.bin/checknr/Makefile,v
retrieving revision 1.1
diff -u -r1.1 Makefile
--- usr.bin/checknr/Makefile 17 Jun 2003 02:56:01 -0000 1.1
+++ usr.bin/checknr/Makefile 19 Jan 2005 22:45:17 -0000
@@ -1,6 +1,7 @@
# @(#)Makefile 8.1 (Berkeley) 6/6/93
PROG= checknr
+WARNS?= 6
CFLAGS+=-Wall
.include <bsd.prog.mk>
Index: usr.bin/checknr/checknr.c
===================================================================
RCS file: /home/dcvs/src/usr.bin/checknr/checknr.c,v
retrieving revision 1.4
diff -u -r1.4 checknr.c
--- usr.bin/checknr/checknr.c 3 Nov 2003 19:31:28 -0000 1.4
+++ usr.bin/checknr/checknr.c 19 Jan 2005 23:09:53 -0000
@@ -52,18 +52,18 @@
#define MAXBR 100 /* Max number of bracket pairs known */
#define MAXCMDS 500 /* Max number of commands known */
-void addcmd(char *);
-void addmac(char *);
-int binsrch(char *);
-void checkknown(char *);
-void chkcmd(char *, char *);
-void complain(int);
-int eq(char *, char *);
-void nomatch(char *);
-void pe(int);
-void process(FILE *);
-void prop(int);
-static void usage(void);
+static void addcmd(char *);
+static void addmac(const char *);
+static int binsrch(const char *);
+static void checkknown(const char *);
+static void chkcmd(const char *);
+static void complain(int);
+static int eq(const char *, const char *);
+static void nomatch(const char *);
+static void pe(int);
+static void process(FILE *);
+static void prop(int);
+static void usage(void);
/*
* The stack on which we remember what we've seen so far.
@@ -80,8 +80,8 @@
* The kinds of opening and closing brackets.
*/
struct brstr {
- char *opbr;
- char *clbr;
+ const char *opbr;
+ const char *clbr;
} br[MAXBR] = {
/* A few bare bones troff commands */
#define SZ 0
@@ -138,7 +138,7 @@
* All commands known to nroff, plus macro packages.
* Used so we can complain about unrecognized commands.
*/
-char *knowncmds[MAXCMDS] = {
+const char *knowncmds[MAXCMDS] = {
"$c", "$f", "$h", "$p", "$s", "(b", "(c", "(d", "(f", "(l", "(q", "(t",
"(x", "(z", ")b", ")c", ")d", ")f", ")l", ")q", ")t", ")x", ")z", "++",
"+c", "1C", "1c", "2C", "2c", "@(", "@)", "@C", "@D", "@F", "@I", "@M",
@@ -174,7 +174,7 @@
int lineno; /* current line number in input file */
char line[256]; /* the current line */
-char *cfilename; /* name of current file */
+const char *cfilename; /* name of current file */
int nfiles; /* number of files to process */
int fflag; /* -f: ignore \f */
int sflag; /* -s: ignore \s */
@@ -186,7 +186,7 @@
{
FILE *f;
int i;
- char *cp;
+ char *cp, *tmp;
char b1[4];
/* Figure out how many known commands there are */
@@ -204,10 +204,14 @@
for (i=0; br[i].opbr; i++)
;
for (cp=argv[1]+3; cp[-1]; cp += 6) {
- br[i].opbr = malloc(3);
- strncpy(br[i].opbr, cp, 2);
- br[i].clbr = malloc(3);
- strncpy(br[i].clbr, cp+3, 2);
+ tmp = malloc(3);
+ strncpy(tmp, cp, 2);
+ br[i].opbr = tmp;
+
+ tmp = malloc(3);
+ strncpy(tmp, cp + 3, 2);
+ br[i].clbr = tmp;
+
addmac(br[i].opbr); /* knows pairs are also known cmds */
addmac(br[i].clbr);
i++;
@@ -269,10 +273,10 @@
exit(1);
}
-void
+static void
process(FILE *f)
{
- register int i, n;
+ int i, n;
char mac[5]; /* The current macro or nroff command */
int pl;
@@ -306,7 +310,7 @@
if (eq(mac, "de"))
addcmd(line);
- chkcmd(line, mac);
+ chkcmd(mac);
}
/*
@@ -365,7 +369,7 @@
}
}
-void
+static void
complain(int i)
{
pe(stk[i].lno);
@@ -374,7 +378,7 @@
printf("\n");
}
-void
+static void
prop(int i)
{
if (stk[i].pl == 0)
@@ -392,10 +396,10 @@
}
}
-void
-chkcmd(char *line, char *mac)
+static void
+chkcmd(const char *mac)
{
- register int i;
+ int i;
/*
* Check to see if it matches top of stack.
@@ -428,10 +432,10 @@
}
}
-void
-nomatch(char *mac)
+static void
+nomatch(const char *mac)
{
- register int i, j;
+ int i, j;
/*
* Look for a match further down on stack
@@ -473,23 +477,23 @@
}
/* eq: are two strings equal? */
-int
-eq(char *s1, char *s2)
+static int
+eq(const char *s1, const char *s2)
{
return (strcmp(s1, s2) == 0);
}
/* print the first part of an error message, given the line number */
-void
-pe(int lineno)
+static void
+pe(int mylineno)
{
if (nfiles > 1)
printf("%s: ", cfilename);
- printf("%d: ", lineno);
+ printf("%d: ", mylineno);
}
-void
-checkknown(char *mac)
+static void
+checkknown(const char *mac)
{
if (eq(mac, "."))
@@ -506,18 +510,18 @@
/*
* We have a .de xx line in "line". Add xx to the list of known commands.
*/
-void
-addcmd(char *line)
+static void
+addcmd(char *myline)
{
char *mac;
/* grab the macro being defined */
- mac = line+4;
+ mac = myline + 4;
while (isspace(*mac))
mac++;
if (*mac == 0) {
pe(lineno);
- printf("illegal define: %s\n", line);
+ printf("illegal define: %s\n", myline);
return;
}
mac[2] = 0;
@@ -535,12 +539,13 @@
* structure here but this is a quick-and-dirty job and I just don't
* have time to mess with it. (I wonder if this will come back to haunt
* me someday?) Anyway, I claim that .de is fairly rare in user
- * nroff programs, and the register loop below is pretty fast.
+ * nroff programs, and the loop below is pretty fast.
*/
-void
-addmac(char *mac)
+static void
+addmac(const char *mac)
{
- register char **src, **dest, **loc;
+ const char **src, **dest, **loc;
+ char *tmp;
if (binsrch(mac) >= 0){ /* it's OK to redefine something */
#ifdef DEBUG
@@ -557,8 +562,11 @@
dest = src+1;
while (dest > loc)
*dest-- = *src--;
- *loc = malloc(3);
- strcpy(*loc, mac);
+
+ tmp = malloc(3);
+ strncpy(tmp, mac, 2);
+ *loc = tmp;
+
ncmds++;
#ifdef DEBUG
printf("after: %s %s %s %s %s, %d cmds\n", knowncmds[slot-2], knowncmds[slot-1], knowncmds[slot], knowncmds[slot+1], knowncmds[slot+2], ncmds);
@@ -569,13 +577,13 @@
* Do a binary search in knowncmds for mac.
* If found, return the index. If not, return -1.
*/
-int
-binsrch(char *mac)
+static int
+binsrch(const char *mac)
{
- register char *p; /* pointer to current cmd in list */
- register int d; /* difference if any */
- register int mid; /* mid point in binary search */
- register int top, bot; /* boundaries of bin search, inclusive */
+ const char *p; /* pointer to current cmd in list */
+ int d; /* difference if any */
+ int mid; /* mid point in binary search */
+ int top, bot; /* boundaries of bin search, inclusive */
top = ncmds-1;
bot = 0;
More information about the Submit
mailing list