]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - caesar/caesar.c
Don't rely upon /usr/games being in PATH, include it explicitly.
[bsdgames-darwin.git] / caesar / caesar.c
index de5a2e8a620391ce79cf9129aafdae889f6c595e..99bcd7e3259c35badd05cd928d1ad5bdda63847d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: caesar.c,v 1.3 1995/03/21 15:08:21 cgd Exp $   */
+/*     $NetBSD: caesar.c,v 1.10 2000/01/09 17:17:20 jsm Exp $  */
 
 /*
  * Copyright (c) 1989, 1993
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1989, 1993\n\
-       The Regents of the University of California.  All rights reserved.\n";
+__COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\
+       The Regents of the University of California.  All rights reserved.\n");
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)caesar.c   8.1 (Berkeley) 5/31/93";
 #else
-static char rcsid[] = "$NetBSD: caesar.c,v 1.3 1995/03/21 15:08:21 cgd Exp $";
+__RCSID("$NetBSD: caesar.c,v 1.10 2000/01/09 17:17:20 jsm Exp $");
 #endif
 #endif /* not lint */
 
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
 #include <math.h>
 #include <stdio.h>
-#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
 #include <unistd.h>
 
 #define        LINELENGTH      2048
@@ -75,35 +79,38 @@ double stdf[26] = {
        2.62, 0.81, 1.88, 0.23,  2.07, 0.06,
 };
 
+
+int    main __P((int, char *[]));
+void   printit __P((const char *)) __attribute__((__noreturn__));
+
+int
 main(argc, argv)
        int argc;
        char **argv;
 {
-       extern int errno;
-       register int ch, dot, i, nread, winnerdot;
-       register char *inbuf;
+       int ch, dot, i, nread, winnerdot;
+       char *inbuf;
        int obs[26], try, winner;
-       char *malloc(), *strerror();
 
+       /* revoke setgid privileges */
+       setregid(getgid(), getgid());
+
+       winnerdot = 0;
        if (argc > 1)
                printit(argv[1]);
 
-       if (!(inbuf = malloc(LINELENGTH))) {
-               (void)fprintf(stderr, "caesar: out of memory.\n");
-               exit(1);
-       }
+       if (!(inbuf = malloc(LINELENGTH)))
+               err(1, NULL);
 
        /* adjust frequency table to weight low probs REAL low */
        for (i = 0; i < 26; ++i)
                stdf[i] = log(stdf[i]) + log(26.0 / 100.0);
 
        /* zero out observation table */
-       bzero(obs, 26 * sizeof(int));
+       memset(obs, 0, 26 * sizeof(int));
 
-       if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0) {
-               (void)fprintf(stderr, "caesar: %s\n", strerror(errno));
-               exit(1);
-       }
+       if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0)
+               err(1, "reading from stdin");
        for (i = nread; i--;) {
                ch = inbuf[i];
                if (islower(ch))
@@ -137,23 +144,20 @@ main(argc, argv)
                }
                if (nread < LINELENGTH)
                        break;
-               if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0) {
-                       (void)fprintf(stderr, "caesar: %s\n", strerror(errno));
-                       exit(1);
-               }
+               if ((nread = read(STDIN_FILENO, inbuf, LINELENGTH)) < 0)
+                       err(1, "reading from stdin");
        }
        exit(0);
 }
 
+void
 printit(arg)
-       char *arg;
+       const char *arg;
 {
-       register int ch, rot;
+       int ch, rot;
 
-       if ((rot = atoi(arg)) < 0) {
-               (void)fprintf(stderr, "caesar: bad rotation value.\n");
-               exit(1);
-       }
+       if ((rot = atoi(arg)) < 0)
+               errx(1, "bad rotation value.");
        while ((ch = getchar()) != EOF)
                putchar(ROTATE(ch, rot));
        exit(0);