summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/mkstr/mkstr.c81
1 files changed, 43 insertions, 38 deletions
diff --git a/usr.bin/mkstr/mkstr.c b/usr.bin/mkstr/mkstr.c
index e855ec22b22..c51bf61947c 100644
--- a/usr.bin/mkstr/mkstr.c
+++ b/usr.bin/mkstr/mkstr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mkstr.c,v 1.6 2002/05/27 03:14:22 deraadt Exp $ */
+/* $OpenBSD: mkstr.c,v 1.7 2002/12/13 14:39:55 millert Exp $ */
/* $NetBSD: mkstr.c,v 1.4 1995/09/28 06:22:20 tls Exp $ */
/*
@@ -35,21 +35,23 @@
*/
#ifndef lint
-static char copyright[] =
+static const char copyright[] =
"@(#) Copyright (c) 1980, 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
#if 0
-static char sccsid[] = "@(#)mkstr.c 8.1 (Berkeley) 6/6/93";
+static const char sccsid[] = "@(#)mkstr.c 8.1 (Berkeley) 6/6/93";
#else
-static char rcsid[] = "$OpenBSD: mkstr.c,v 1.6 2002/05/27 03:14:22 deraadt Exp $";
+static const char rcsid[] = "$OpenBSD: mkstr.c,v 1.7 2002/12/13 14:39:55 millert Exp $";
#endif
#endif /* not lint */
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/stat.h>
+
+#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -84,30 +86,28 @@ static char rcsid[] = "$OpenBSD: mkstr.c,v 1.6 2002/05/27 03:14:22 deraadt Exp $
FILE *mesgread, *mesgwrite;
-char *progname;
-char usagestr[] = "usage: %s [ - ] mesgfile prefix file ...\n";
-char name[100], *np;
+char name[MAXPATHLEN], *np;
void inithash(void);
void process(void);
int match(char *);
void copystr(void);
int octdigit(char);
-unsigned int hashit(char *, char, unsigned);
+unsigned int hashit(char *, char, unsigned int);
int fgetNUL(char *, int, FILE *);
+__dead void usage(void);
int
-main(argc, argv)
- int argc;
- char *argv[];
+main(int argc, char **argv)
{
+ size_t n;
char addon = 0;
- argc--, progname = *argv++;
+ argc--, argv++;
if (argc > 1 && argv[0][0] == '-')
addon++, argc--, argv++;
if (argc < 3)
- fprintf(stderr, usagestr, progname), exit(1);
+ usage();
mesgwrite = fopen(argv[0], addon ? "a" : "w");
if (mesgwrite == NULL)
perror(argv[0]), exit(1);
@@ -116,11 +116,14 @@ main(argc, argv)
perror(argv[0]), exit(1);
inithash();
argc--, argv++;
- strcpy(name, argv[0]);
- np = name + strlen(name);
+ if ((n = strlcpy(name, argv[0], sizeof(name))) >= sizeof(name))
+ errx(1, "%s too long", argv[0]);
+ np = name + n;
argc--, argv++;
do {
- strcpy(np, argv[0]);
+ if (strlcpy(np, argv[0], sizeof(name) - n) >=
+ sizeof(name) - n)
+ errx(1, "%s too long", argv[0]);
if (freopen(name, "w", stdout) == NULL)
perror(name), exit(1);
if (freopen(argv[0], "r", stdin) == NULL)
@@ -128,11 +131,11 @@ main(argc, argv)
process();
argc--, argv++;
} while (argc > 0);
- return 0;
+ exit (0);
}
void
-process()
+process(void)
{
int c;
@@ -156,8 +159,7 @@ process()
}
int
-match(ocp)
- char *ocp;
+match(char *ocp)
{
char *cp;
int c;
@@ -175,7 +177,7 @@ match(ocp)
}
void
-copystr()
+copystr(void)
{
int c, ch;
char buf[512];
@@ -239,15 +241,14 @@ out:
}
int
-octdigit(c)
- char c;
+octdigit(char c)
{
return (c >= '0' && c <= '7');
}
void
-inithash()
+inithash(void)
{
char buf[512];
int mesgpt = 0;
@@ -268,10 +269,7 @@ struct hash {
} *bucket[NBUCKETS];
unsigned int
-hashit(str, really, fakept)
- char *str;
- char really;
- unsigned int fakept;
+hashit(char *str, char really, unsigned int fakept)
{
int i;
struct hash *hp;
@@ -291,14 +289,15 @@ hashit(str, really, fakept)
if (hp->hval == hashval) {
fseek(mesgread, (long) hp->hpt, 0);
fgetNUL(buf, sizeof buf, mesgread);
-/*
+#ifdef DEBUG
fprintf(stderr, "Got (from %d) %s\n", hp->hpt, buf);
-*/
+#endif
if (strcmp(buf, str) == 0)
break;
}
if (!really || hp == 0) {
- hp = (struct hash *) calloc(1, sizeof *hp);
+ if ((hp = (struct hash *) calloc(1, sizeof *hp)) == NULL)
+ err(1, "calloc");
hp->hnext = bucket[i];
hp->hval = hashval;
hp->hpt = really ? ftell(mesgwrite) : fakept;
@@ -308,17 +307,14 @@ hashit(str, really, fakept)
}
bucket[i] = hp;
}
-/*
+#ifdef DEBUG
fprintf(stderr, "%s hashed to %ld at %d\n", str, hp->hval, hp->hpt);
-*/
+#endif
return (hp->hpt);
}
int
-fgetNUL(obuf, rmdr, file)
- char *obuf;
- int rmdr;
- FILE *file;
+fgetNUL(char *obuf, int rmdr, FILE *file)
{
int c;
char *buf = obuf;
@@ -329,3 +325,12 @@ fgetNUL(obuf, rmdr, file)
getc(file);
return ((feof(file) || ferror(file)) ? 0 : 1);
}
+
+__dead void
+usage(void)
+{
+ extern char *__progname;
+
+ fprintf(stderr, "usage: %s [-] mesgfile prefix file ...\n", __progname);
+ exit(1);
+}