]> Zhao Yanbai Git Server - minix.git/commitdiff
replace logger with NetBSD version 32/3532/1
authorChristopher Simons <christopherleesimons@gmail.com>
Sat, 27 Oct 2018 01:12:41 +0000 (21:12 -0400)
committerLionel Sambuc <lionel.sambuc@gmail.com>
Sat, 27 Oct 2018 15:05:47 +0000 (17:05 +0200)
closes #265

Change-Id: I31cb8e0ae57cc2c18a6aab1d2749818e1656c294

minix/commands/Makefile
minix/commands/logger/Makefile [deleted file]
minix/commands/logger/logger.1 [deleted file]
minix/commands/logger/logger.c [deleted file]
usr.bin/Makefile
usr.bin/logger/Makefile [new file with mode: 0644]
usr.bin/logger/logger.1 [new file with mode: 0644]
usr.bin/logger/logger.c [new file with mode: 0644]

index 4580d838189e952563cd618f6f09f6d2454d2e59..8aca55470b03d2901c9b3292768ca178e7baeea6 100644 (file)
@@ -13,7 +13,7 @@ SUBDIR=       at backup \
        gcov-pull \
        ifdef \
        intr isoread \
-       loadkeys loadramdisk logger look lp \
+       loadkeys loadramdisk look lp \
        lpd lspci mail MAKEDEV \
        minix-service mount mt netconf \
        prep printroot \
diff --git a/minix/commands/logger/Makefile b/minix/commands/logger/Makefile
deleted file mode 100644 (file)
index b913354..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-PROG=  logger
-
-.include <bsd.prog.mk>
diff --git a/minix/commands/logger/logger.1 b/minix/commands/logger/logger.1
deleted file mode 100644 (file)
index 5e9c62d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-.\" Copyright (c) 1983, 1990, 1993
-.\" The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    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:
-.\"    This product includes software developed by the University of
-.\"    California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" from:      @(#)logger.1    8.1 (Berkeley) 6/6/93
-.\" Modified for Minix porting by G. Falzoni <gfalzoni@inwind.it>
-.\"
-.\" Local macros
-.de Xr
-.BR \\$1 (\\$2)\\$3
-..
-.de LB
-.TP \\$1
-\\fB\\$2\\fR
-\\$3
-..
-.de LI
-.TP \\$1
-\\fI\\$2\\fR
-\\$3
-..
-.de LR
-.TP \\$1
-\\fR\\$2\\fR
-\\$3
-..
-.\" end local macros
-.DD June 6, 1993
-.TH LOGGER 1 "Jan. 18, 2000"
-.\"    Os BSD 4.3
-.SH NAME
-logger \- make entries in the system log
-.SH SYNOPSIS
-logger
-.RB [ \-i ]
-.RB [ \-f " " file ]
-.RB [ \-p " " pri ]
-.RB [ \-t " " tag ]
-.B message ...
-.SH DESCRIPTION
-Logger provides a shell command interface to the
-.Xr syslog 3
-system log module.
-.PP
-The following options are available to control message formatting:
-.PP
-.LB 9 -i "Log the process id of the logger process with each line."
-.\" LB 9 -s "Log the message to standard error, as well as the system log."
-.LB 9 "-f file" "Log the specified file."
-.LB 9 "-p pri" "Enter the message with the specified priority.
-The priority may be specified numerically or as a `facility.level'
-pair.  For example, `\-p local3.info' logs the message(s) as
-.BR info rmational
-level in the
-.B local3
-facility.  The default is `user.notice'.
-.LB 9 "-t tag" "Mark every line in the log with the specified
-.BR tag  .
-.LB 9 message "Write the message to log.  If not specified, and the"
-.B \-f
-flag is not provided, standard input is logged.
-.PP
-The logger utility exits 0 on success, and >0 if an error occurs.
-.SH EXAMPLES
-.PP
-logger System rebooted
-.PP
-logger \-p local0.notice \-t HOSTIDM \-f /dev/idmc
-.SH SEE ALSO
-.Xr syslog 3 , 
-.Xr syslogd 8 .
-.SH STANDARDS
-The logger command is expected to be IEEE Std1003.2 (`POSIX') compatible.
diff --git a/minix/commands/logger/logger.c b/minix/commands/logger/logger.c
deleted file mode 100644 (file)
index eadb586..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright (c) 1983, 1988, 1993
- * The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    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:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * #ifndef lint
- * char copyright[] =
- * "@(#) Copyright (c) 1983 Regents of the University of California.\n\
- *  All rights reserved.\n";
- * #endif
- *
- * #ifndef lint
- * static char sccsid[] = "@(#)logger.c        6.8 (Berkeley) 6/29/88";
- * #endif
- *
- * Porting to Minix by G. Falzoni <gfalzoni@inwind.it>
- */
-
-#include <sys/types.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-/*
-**     LOGGER -- read and log utility
-**
-**     This program reads from an input and arranges to write the
-**     result on the system log, along with a useful tag.
-*/
-
-#define  SYSLOG_NAMES
-#include <syslog.h>
-
-/*
-**     Name:           void bailout(char *msg, char *arg);
-**     Function:       Handles error exit.
-*/
-void bailout(const char *msg, const char *arg)
-{
-
-  fprintf(stderr, "logger: %s %s\n", msg, arg);
-  exit(EXIT_FAILURE);
-}
-
-/*
-**     Name:           int decode(char *name, struct code * codetab);
-**     Function:       Decodes a name to the equivalent priority/facility.
-*/
-int decode(char *name, const struct _code * codetab)
-{
-  const struct _code *c;
-
-  if (isdigit(*name)) return(atoi(name));
-
-  for (c = codetab; c->c_name; c++)
-       if (!strcasecmp(name, c->c_name)) return(c->c_val);
-
-  return(-1);
-}
-
-/*
-**     Name:           int pencode(char *s);
-**     Function:       Decode a symbolic name (facility/priority)
-**                     to a numeric value.
-*/
-int pencode(char *s)
-{
-  char *save;
-  int fac, lev;
-
-  for (save = s; *s && *s != '.'; ++s);
-  if (*s) {
-       *s = '\0';
-       fac = decode(save, facilitynames);
-       if (fac < 0) bailout("unknown facility name:", save);
-       *s++ = '.';
-  } else {
-       fac = 0;
-       s = save;
-  }
-  lev = decode(s, prioritynames);
-  if (lev < 0) bailout("unknown priority name:", save);
-  return((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
-}
-
-/*
-**     Name:           int main(int argc, char **argv);
-**     Function:       Main entry for logger.
-*/
-int main(int argc, char **argv)
-{
-  int pri = LOG_NOTICE;
-  int ch, logflags = 0;
-  char *tag, buf[200];
-  static const char usage[] =
-  "[-i] [-f file] [-p pri] [-t tag] [ message ... ]";
-
-  tag = NULL;
-  while ((ch = getopt(argc, argv, "f:ip:t:")) != EOF) {
-       switch ((char) ch) {
-           case 'f':           /* file to log */
-               if (freopen(optarg, "r", stdin) == NULL) {
-                       bailout(strerror(errno), optarg);
-               }
-               break;
-           case 'i':           /* log process id also */
-               logflags |= LOG_PID;
-               break;
-           case 'p':           /* priority */
-               pri = pencode(optarg);
-               break;
-           case 't':           /* tag */
-               tag = optarg;
-               break;
-           case '?':
-           default:    bailout(usage, "");     break;
-       }
-  }
-  argc -= optind;
-  argv += optind;
-
-  /* Setup for logging */
-  openlog(tag ? tag : getlogin(), logflags, 0);
-  fclose(stdout);
-
-  if (argc > 0) {              /* Log input line if appropriate */
-       char *p, *endp;
-       int len;
-
-       for (p = buf, endp = buf + sizeof(buf) - 1;;) {
-               len = strlen(*argv);
-               if (p + len < endp && p > buf) {
-                       *--p = '\0';
-                       syslog(pri, "%s", buf);
-                       p = buf;
-               }
-               if (len > sizeof(buf) - 1) {
-                       syslog(pri, "%s", *argv++);
-                       if (!--argc) break;
-               } else {
-                       memcpy(p, *argv++, len);
-                       p += len;
-                       if (!--argc) break;
-                       *p++ = ' ';
-                       *--p = '\0';
-               }
-       }
-       if (p != buf) {
-               *p = '\0';
-               syslog(pri, "%s", buf);
-       }
-  } else                       /* Main loop */
-       while (fgets(buf, sizeof(buf), stdin) != NULL) syslog(pri, "%s", buf);
-
-  return EXIT_SUCCESS;
-}
-
-/** logger.c **/
index 7fa904bd2183dd42eda66b0cfe9985ec74c66427..ff23772fbca680f1c0c122fdff139c7afe868956 100644 (file)
@@ -15,7 +15,7 @@ SUBDIR= asa \
        getopt \
        head hexdump id indent infocmp ipcrm ipcs join jot \
        lam last ldd leave \
-       locale lock login logname lorder m4 \
+       locale lock logger login logname lorder m4 \
        machine make man menuc mesg \
        mkcsmapper mkdep mkesdb mkfifo mklocale mkstr mktemp \
        msgc \
diff --git a/usr.bin/logger/Makefile b/usr.bin/logger/Makefile
new file mode 100644 (file)
index 0000000..fa46cd2
--- /dev/null
@@ -0,0 +1,8 @@
+#      $NetBSD: Makefile,v 1.4 2007/05/28 12:06:28 tls Exp $
+#      @(#)Makefile    8.1 (Berkeley) 6/6/93
+
+USE_FORT?= yes # network client
+
+PROG=  logger
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/logger/logger.1 b/usr.bin/logger/logger.1
new file mode 100644 (file)
index 0000000..da47b68
--- /dev/null
@@ -0,0 +1,117 @@
+.\"    $NetBSD: logger.1,v 1.15 2012/05/13 17:08:31 njoly Exp $
+.\"
+.\" Copyright (c) 1983, 1990, 1993
+.\"    The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    @(#)logger.1    8.1 (Berkeley) 6/6/93
+.\"
+.Dd April 26, 2012
+.Dt LOGGER 1
+.Os
+.Sh NAME
+.Nm logger
+.Nd make entries in the system log
+.Sh SYNOPSIS
+.Nm
+.Op Fl cins
+.Op Fl d Ar SD
+.Op Fl f Ar file
+.Op Fl m Ar msgid
+.Op Fl p Ar pri
+.Op Fl t Ar tag
+.Op Ar message ...
+.Sh DESCRIPTION
+.Nm
+provides a shell command interface to the
+.Xr syslog 3
+system log module.
+.Pp
+Options:
+.Pp
+.Bl -tag -width "messageXX"
+.It Fl c
+Log to console
+.Dv ( LOG_CONS ) .
+.It Fl d Ar sd
+Log this in the structured data (SD) field.
+.Po
+.Ar sd
+has to be passed as one argument and will require careful quoting when used from
+the shell.
+.Pc
+.It Fl f Ar file
+Log the specified file.
+.It Fl i
+Log the process id of the logger process
+with each line
+.Dv ( LOG_PID ) .
+.It Fl m Ar msgid
+The MSGID used for the message.
+.It Fl n
+Open log file immediately
+.Dv ( LOG_NDELAY ) .
+.It Fl p Ar pri
+Enter the message with the specified priority.
+The priority may be specified numerically or as a
+.Dq facility.level
+pair.
+For example,
+.Dq \-p local3.info
+logs the message(s) as
+.Ar info Ns rmational
+level in the
+.Ar local3
+facility.
+The default is
+.Dq user.notice .
+.It Fl s
+Log the message to standard error, as well as the system log
+.Dv ( LOG_PERROR ) .
+.It Fl t Ar tag
+Mark every line in the log with the specified
+.Ar tag  .
+.It Ar message
+Write the message to log; if not specified, and the
+.Fl f
+flag is not provided, standard input is logged.
+.El
+.Sh EXIT STATUS
+.Ex -std logger
+.Sh EXAMPLES
+.Bd -literal -offset indent -compact
+logger System rebooted
+
+logger \-p local0.notice \-t HOSTIDM \-f /dev/idmc
+.Ed
+.Sh SEE ALSO
+.Xr syslog 3 ,
+.Xr syslogd 8
+.Sh STANDARDS
+The
+.Nm
+utility conforms to
+.St -p1003.2-92 .
diff --git a/usr.bin/logger/logger.c b/usr.bin/logger/logger.c
new file mode 100644 (file)
index 0000000..b87aa5d
--- /dev/null
@@ -0,0 +1,203 @@
+/*     $NetBSD: logger.c,v 1.17 2012/04/27 06:30:48 wiz Exp $  */
+
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1983, 1993\
+ The Regents of the University of California.  All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)logger.c   8.1 (Berkeley) 6/6/93";
+#endif
+__RCSID("$NetBSD: logger.c,v 1.17 2012/04/27 06:30:48 wiz Exp $");
+#endif /* not lint */
+
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <err.h>
+
+#define        SYSLOG_NAMES
+#include <syslog.h>
+
+static int     decode(const char *, const CODE *);
+static int     pencode(char *);
+__dead static void     usage(void);
+
+/*
+ * logger -- read and log utility
+ *
+ *     Reads from an input and arranges to write the result on the system
+ *     log.
+ */
+int
+main(int argc, char *argv[])
+{
+       int ch, logflags, pri;
+       const char *tag;
+       const char *sd = "-";
+       const char *msgid = "-";
+       char buf[1024];
+
+       tag = NULL;
+       pri = LOG_NOTICE;
+       logflags = 0;
+       while ((ch = getopt(argc, argv, "cd:f:im:np:st:")) != -1)
+               switch((char)ch) {
+               case 'c':       /* log to console */
+                       logflags |= LOG_CONS;
+                       break;
+               case 'd':               /* structured data field */
+                       sd = optarg;
+                       break;
+               case 'f':               /* file to log */
+                       if (freopen(optarg, "r", stdin) == NULL)
+                               err(EXIT_FAILURE, "%s", optarg);
+                       break;
+               case 'i':               /* log process id also */
+                       logflags |= LOG_PID;
+                       break;
+               case 'm':               /* msgid field */
+                       msgid = optarg;
+                       break;
+               case 'n':               /* open log file immediately */
+                       logflags |= LOG_NDELAY;
+                       break;
+               case 'p':               /* priority */
+                       pri = pencode(optarg);
+                       break;
+               case 's':               /* log to standard error */
+                       logflags |= LOG_PERROR;
+                       break;
+               case 't':               /* tag */
+                       tag = optarg;
+                       break;
+               case '?':
+               default:
+                       usage();
+               }
+       argc -= optind;
+       argv += optind;
+
+       /* setup for logging */
+       openlog(tag != NULL ? tag : getlogin(), logflags, 0);
+       (void)fclose(stdout);
+
+       /* log input line if appropriate */
+       if (argc > 0) {
+               char *p, *endp;
+               size_t len;
+
+               for (p = buf, endp = buf + sizeof(buf) - 2; *argv != NULL;) {
+                       len = strlen(*argv);
+                       if (p + len > endp && p > buf) {
+                               syslogp(pri, msgid, sd, "%s", buf);
+                               p = buf;
+                       }
+                       if (len > sizeof(buf) - 1)
+                               syslogp(pri, msgid, sd, "%s", *argv++);
+                       else {
+                               if (p != buf)
+                                       *p++ = ' ';
+                               memmove(p, *argv++, len);
+                               *(p += len) = '\0';
+                       }
+               }
+               if (p != buf)
+                       syslogp(pri, msgid, sd, "%s", buf);
+       } else  /* TODO: allow syslog-protocol messages from file/stdin
+                *       but that will require parsing the line to split
+                *       it into three fields.
+                */
+               while (fgets(buf, sizeof(buf), stdin) != NULL)
+                       syslogp(pri, msgid, sd, "%s", buf);
+
+       exit(EXIT_SUCCESS);
+       /* NOTREACHED */
+}
+
+/*
+ *  Decode a symbolic name to a numeric value
+ */
+static int
+pencode(char *s)
+{
+       char *save;
+       int fac, lev;
+
+       for (save = s; *s != '\0' && *s != '.'; ++s)
+               ;
+       if (*s != '\0') {
+               *s = '\0';
+               fac = decode(save, facilitynames);
+               if (fac < 0)
+                       errx(EXIT_FAILURE, "unknown facility name: %s", save);
+               *s++ = '.';
+       } else {
+               fac = 0;
+               s = save;
+       }
+       lev = decode(s, prioritynames);
+       if (lev < 0)
+               errx(EXIT_FAILURE, "unknown priority name: %s", s);
+       return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
+}
+
+static int
+decode(const char *name, const CODE *codetab)
+{
+       const CODE *c;
+
+       if (isdigit((unsigned char)*name))
+               return (atoi(name));
+
+       for (c = codetab; c->c_name != NULL; c++)
+               if (strcasecmp(name, c->c_name) == 0)
+                       return (c->c_val);
+
+       return (-1);
+}
+
+static void
+usage(void)
+{
+
+       (void)fprintf(stderr,
+           "Usage: %s [-cins] [-d SD] [-f file] [-m msgid] "
+           "[-p pri] [-t tag] [message ...]\n",
+           getprogname());
+       exit(EXIT_FAILURE);
+}