summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/gencat/gencat.c132
1 files changed, 29 insertions, 103 deletions
diff --git a/usr.bin/gencat/gencat.c b/usr.bin/gencat/gencat.c
index bc5faa416b5..40a22a980df 100644
--- a/usr.bin/gencat/gencat.c
+++ b/usr.bin/gencat/gencat.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gencat.c,v 1.4 1996/06/26 05:33:40 deraadt Exp $ */
+/* $OpenBSD: gencat.c,v 1.5 1997/09/21 10:34:00 jdm Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -16,7 +16,7 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
+ * must display the following acknowledgment:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
@@ -70,6 +70,9 @@ up-to-date. Many thanks.
#define _NLS_PRIVATE
+/* ensure 8-bit cleanliness */
+#define ISSPACE(c) (isascii(c) && isspace(c))
+
#include <sys/queue.h>
#include <ctype.h>
#include <stdio.h>
@@ -84,7 +87,6 @@ extern void MCDelSet __P((int setId));
extern void MCAddMsg __P((int msgId, const char *msg));
extern void MCDelMsg __P((int msgId));
extern void MCParse __P((int fd));
-extern void MCReadCat __P((int fd));
extern void MCWriteCat __P((int fd));
struct _msgT {
@@ -181,12 +183,6 @@ error(cptr, msg)
}
static void
-corrupt()
-{
- error(NULL, "corrupt message catalog");
-}
-
-static void
nomem()
{
error(NULL, "out of memory");
@@ -270,11 +266,11 @@ static char *
wskip(cptr)
char *cptr;
{
- if (!*cptr || !isspace(*cptr)) {
+ if (!*cptr || !ISSPACE(*cptr)) {
warning(cptr, "expected a space");
return (cptr);
}
- while (*cptr && isspace(*cptr))
+ while (*cptr && ISSPACE(*cptr))
++cptr;
return (cptr);
}
@@ -283,11 +279,11 @@ static char *
cskip(cptr)
char *cptr;
{
- if (!*cptr || isspace(*cptr)) {
+ if (!*cptr || ISSPACE(*cptr)) {
warning(cptr, "wasn't expecting a space");
return (cptr);
}
- while (*cptr && !isspace(*cptr))
+ while (*cptr && !ISSPACE(*cptr))
++cptr;
return (cptr);
}
@@ -305,7 +301,7 @@ getmsg(fd, cptr, quote)
if (quote && *cptr == quote) {
++cptr;
- }
+ };
clen = strlen(cptr) + 1;
if (clen > msglen) {
@@ -321,8 +317,8 @@ getmsg(fd, cptr, quote)
if (quote && *cptr == quote) {
char *tmp;
tmp = cptr + 1;
- if (*tmp && (!isspace(*tmp) || *wskip(tmp))) {
- warning(cptr, "unexpected quote character, ignoreing");
+ if (*tmp && (!ISSPACE(*tmp) || *wskip(tmp))) {
+ warning(cptr, "unexpected quote character, ignoring");
*tptr++ = *cptr++;
} else {
*cptr = '\0';
@@ -368,6 +364,19 @@ getmsg(fd, cptr, quote)
*tptr++ = '\\';
++cptr;
break;
+ case '"':
+ case '\'':
+ /*
+ * While it isn't necessary to
+ * escape ' and ", let's accept
+ * them escaped and not complain.
+ * (XPG4 states that '\' should be
+ * ignored when not used in a
+ * valid escape sequence)
+ */
+ *tptr++ = '"';
+ ++cptr;
+ break;
default:
if (isdigit(*cptr)) {
*tptr = 0;
@@ -381,7 +390,7 @@ getmsg(fd, cptr, quote)
++cptr;
}
} else {
- warning(cptr, "unrecognized escape sequence");
+ warning(cptr, "unrecognized escape sequence; ignoring escape character");
}
}
} else {
@@ -427,7 +436,7 @@ MCParse(fd)
else
quote = *cptr;
}
- } else if (isspace(*cptr)) {
+ } else if (ISSPACE(*cptr)) {
;
} else {
if (*cptr) {
@@ -453,89 +462,6 @@ MCParse(fd)
}
}
-void
-MCReadCat(fd)
- int fd;
-{
-#if 0
- MCHeaderT mcHead;
- MCMsgT mcMsg;
- MCSetT mcSet;
- msgT *msg;
- setT *set;
- int i;
- char *data;
-
- /* XXX init sethead? */
-
- if (read(fd, &mcHead, sizeof(mcHead)) != sizeof(mcHead))
- corrupt();
- if (strncmp(mcHead.magic, MCMagic, MCMagicLen) != 0)
- corrupt();
- if (mcHead.majorVer != MCMajorVer)
- error(NULL, "unrecognized catalog version");
- if ((mcHead.flags & MCGetByteOrder()) == 0)
- error(NULL, "wrong byte order");
-
- if (lseek(fd, mcHead.firstSet, SEEK_SET) == -1)
- corrupt();
-
- for (;;) {
- if (read(fd, &mcSet, sizeof(mcSet)) != sizeof(mcSet))
- corrupt();
- if (mcSet.invalid)
- continue;
-
- set = xmalloc(sizeof(setT));
- memset(set, '\0', sizeof(*set));
- if (cat->first) {
- cat->last->next = set;
- set->prev = cat->last;
- cat->last = set;
- } else
- cat->first = cat->last = set;
-
- set->setId = mcSet.setId;
-
- /* Get the data */
- if (mcSet.dataLen) {
- data = xmalloc(mcSet.dataLen);
- if (lseek(fd, mcSet.data.off, SEEK_SET) == -1)
- corrupt();
- if (read(fd, data, mcSet.dataLen) != mcSet.dataLen)
- corrupt();
- if (lseek(fd, mcSet.u.firstMsg, SEEK_SET) == -1)
- corrupt();
-
- for (i = 0; i < mcSet.numMsgs; ++i) {
- if (read(fd, &mcMsg, sizeof(mcMsg)) != sizeof(mcMsg))
- corrupt();
- if (mcMsg.invalid) {
- --i;
- continue;
- }
- msg = xmalloc(sizeof(msgT));
- memset(msg, '\0', sizeof(*msg));
- if (set->first) {
- set->last->next = msg;
- msg->prev = set->last;
- set->last = msg;
- } else
- set->first = set->last = msg;
-
- msg->msgId = mcMsg.msgId;
- msg->str = xstrdup((char *) (data + mcMsg.msg.off));
- }
- free(data);
- }
- if (!mcSet.nextSet)
- break;
- if (lseek(fd, mcSet.nextSet, SEEK_SET) == -1)
- corrupt();
- }
-#endif
-}
-
/*
* Write message catalog.
*
@@ -709,7 +635,7 @@ MCAddMsg(msgId, str)
#if 0
/* XXX */
if (msgId > NL_SETMAX) {
- error(NULL, "msgID %d exceeds limit (%d)");
+ error(NULL, "msgId %d exceeds limit (%d)");
/* NOTREACHED */
}
#endif
@@ -750,7 +676,7 @@ MCDelSet(setId)
msg = set->msghead.lh_first;
while (msg) {
free(msg->str);
- LIST_REMOVE(msg, entries)
+ LIST_REMOVE(msg, entries);
}
LIST_REMOVE(set, entries);