]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - snake/snscore/snscore.c
Increase spending on vowels. No object file diffs.
[bsdgames-darwin.git] / snake / snscore / snscore.c
index 482a3a98ac856d96e95594b4d5b8cc2fdfb8b5dc..b09d5180e95af78ae9919f0bf599d9275c5b9bb6 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: snscore.c,v 1.17 2008/07/20 01:03:22 lukem Exp $       */
+
 /*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1980, 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
  * 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
+ * 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.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
+__COPYRIGHT("@(#) Copyright (c) 1980, 1993\
+ The Regents of the University of California.  All rights reserved.");
 #endif /* not lint */
 
 #ifndef lint
-/*static char sccsid[] = "from: @(#)snscore.c  5.7 (Berkeley) 2/28/91";*/
-static char rcsid[] = "$Id: snscore.c,v 1.2 1993/08/01 18:51:03 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)snscore.c  8.1 (Berkeley) 7/19/93";
+#else
+__RCSID("$NetBSD: snscore.c,v 1.17 2008/07/20 01:03:22 lukem Exp $");
+#endif
 #endif /* not lint */
 
 #include <sys/types.h>
+#include <err.h>
 #include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
 #include "pathnames.h"
 
-char *recfile = _PATH_RAWSCORES;
+const char *recfile = _PATH_RAWSCORES;
 #define MAXPLAYERS 256
 
 struct player  {
@@ -57,30 +61,37 @@ struct      player  {
        char    *name;
 } players[MAXPLAYERS], temp;
 
+int    main(void);
+
+int
 main()
 {
-       char    buf[80], cp;
        short   uid, score;
        FILE    *fd;
        int     noplayers;
        int     i, j, notsorted;
        short   whoallbest, allbest;
-       char    *q;
+       const   char *q;
        struct  passwd  *p;
 
+       /* Revoke setgid privileges */
+       setgid(getgid());
+
        fd = fopen(recfile, "r");
-       if (fd == NULL) {
-               perror(recfile);
-               exit(1);
-       }
+       if (fd == NULL)
+               err(1, "opening `%s'", recfile);
        printf("Snake players scores to date\n");
-       fread(&whoallbest, sizeof(short), 1, fd);
+       if (fread(&whoallbest, sizeof(short), 1, fd) == 0) {
+               printf("No scores recorded yet!\n");
+               exit(0);
+       }
        fread(&allbest, sizeof(short), 1, fd);
-       for (uid=2;;uid++) {
+       noplayers = 0;
+       for (uid = 2; ;uid++) {
                if(fread(&score, sizeof(short), 1, fd) == 0)
                        break;
                if (score > 0) {
-                       if (noplayers > MAXPLAYERS) {
+                       if (noplayers >= MAXPLAYERS) {
                                printf("too many players\n");
                                exit(2);
                        }
@@ -90,29 +101,30 @@ main()
                        if (p == NULL)
                                continue;
                        q = p -> pw_name;
-                       players[noplayers].name = malloc(strlen(q)+1);
-                       strcpy(players[noplayers].name, q);
+                       players[noplayers].name = strdup(q);
+                       if (players[noplayers].name == NULL)
+                               err(1, NULL);
                        noplayers++;
                }
        }
 
        /* bubble sort scores */
-       for (notsorted=1; notsorted; ) {
+       for (notsorted = 1; notsorted; ) {
                notsorted = 0;
-               for (i=0; i<noplayers-1; i++)
-                       if (players[i].scores < players[i+1].scores) {
+               for (i = 0; i < noplayers - 1; i++)
+                       if (players[i].scores < players[i + 1].scores) {
                                temp = players[i];
-                               players[i] = players[i+1];
-                               players[i+1] = temp;
+                               players[i] = players[i + 1];
+                               players[i + 1] = temp;
                                notsorted++;
                        }
        }
 
        j = 1;
-       for (i=0; i<noplayers; i++) {
+       for (i = 0; i < noplayers; i++) {
                printf("%d:\t$%d\t%s\n", j, players[i].scores, players[i].name);
-               if (players[i].scores > players[i+1].scores)
-                       j = i+2;
+               if (players[i].scores > players[i + 1].scores)
+                       j = i + 2;
        }
        exit(0);
 }