X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/8f1d2ef658f95549eb33fe5265f8f11c5129bece..e18afed7d695edac870ddf55aabc85c0a95a4b5f:/lib-src/update-game-score.c diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c index 9466bf7b14..e0c940510b 100644 --- a/lib-src/update-game-score.c +++ b/lib-src/update-game-score.c @@ -1,6 +1,6 @@ /* update-game-score.c --- Update a score file -Copyright (C) 2002-2011 Free Software Foundation, Inc. +Copyright (C) 2002-2012 Free Software Foundation, Inc. Author: Colin Walters @@ -35,12 +35,9 @@ along with GNU Emacs. If not, see . */ #include #include -#ifdef HAVE_STRING_H +#include #include -#endif -#ifdef HAVE_STDLIB_H #include -#endif #include #include #include @@ -48,16 +45,10 @@ along with GNU Emacs. If not, see . */ #ifdef HAVE_FCNTL_H #include #endif -#ifdef STDC_HEADERS -#include -#endif #include +#include -/* Needed for SunOS4, for instance. */ -extern char *optarg; -extern int optind, opterr; - -int usage (int err) NO_RETURN; +static int usage (int err) NO_RETURN; #define MAX_ATTEMPTS 5 #define MAX_SCORES 200 @@ -68,10 +59,10 @@ int usage (int err) NO_RETURN; #define difftime(t1, t0) (double)((t1) - (t0)) #endif -int +static int usage (int err) { - fprintf (stdout, "Usage: update-game-score [-m MAX ] [ -r ] game/scorefile SCORE DATA\n"); + fprintf (stdout, "Usage: update-game-score [-m MAX] [-r] [-d DIR] game/scorefile SCORE DATA\n"); fprintf (stdout, " update-game-score -h\n"); fprintf (stdout, " -h\t\tDisplay this help.\n"); fprintf (stdout, " -m MAX\t\tLimit the maximum number of scores to MAX.\n"); @@ -80,8 +71,8 @@ usage (int err) exit (err); } -int lock_file (const char *filename, void **state); -int unlock_file (const char *filename, void *state); +static int lock_file (const char *filename, void **state); +static int unlock_file (const char *filename, void *state); struct score_entry { @@ -90,31 +81,30 @@ struct score_entry char *data; }; -int read_scores (const char *filename, struct score_entry **scores, - int *count); -int push_score (struct score_entry **scores, int *count, - int newscore, char *username, char *newdata); -void sort_scores (struct score_entry *scores, int count, int reverse); -int write_scores (const char *filename, const struct score_entry *scores, - int count); +static int read_scores (const char *filename, struct score_entry **scores, + int *count); +static int push_score (struct score_entry **scores, int *count, + int newscore, char *username, char *newdata); +static void sort_scores (struct score_entry *scores, int count, int reverse); +static int write_scores (const char *filename, + const struct score_entry *scores, int count); -void lose (const char *msg) NO_RETURN; +static void lose (const char *msg) NO_RETURN; -void +static void lose (const char *msg) { fprintf (stderr, "%s\n", msg); exit (EXIT_FAILURE); } -void lose_syserr (const char *msg) NO_RETURN; +static void lose_syserr (const char *msg) NO_RETURN; /* Taken from sysdep.c. */ #ifndef HAVE_STRERROR #ifndef WINDOWSNT char * -strerror (errnum) - int errnum; +strerror (int errnum) { extern char *sys_errlist[]; extern int sys_nerr; @@ -126,35 +116,29 @@ strerror (errnum) #endif /* not WINDOWSNT */ #endif /* ! HAVE_STRERROR */ -void +static void lose_syserr (const char *msg) { fprintf (stderr, "%s: %s\n", msg, strerror (errno)); exit (EXIT_FAILURE); } -char * +static char * get_user_id (void) { - char *name; struct passwd *buf = getpwuid (getuid ()); if (!buf) { - int count = 1; - int uid = (int) getuid (); - int tuid = uid; - while (tuid /= 10) - count++; - name = malloc (count+1); - if (!name) - return NULL; - sprintf (name, "%d", uid); + long uid = getuid (); + char *name = malloc (sizeof uid * CHAR_BIT / 3 + 1); + if (name) + sprintf (name, "%ld", uid); return name; } return buf->pw_name; } -const char * +static const char * get_prefix (int running_suid, const char *user_prefix) { if (!running_suid && user_prefix == NULL) @@ -242,13 +226,15 @@ main (int argc, char **argv) push_score (&scores, &scorecount, newscore, user_id, newdata); sort_scores (scores, scorecount, reverse); /* Limit the number of scores. If we're using reverse sorting, then - we should increment the beginning of the array, to skip over the - *smallest* scores. Otherwise, we just decrement the number of - scores, since the smallest will be at the end. */ + also increment the beginning of the array, to skip over the + *smallest* scores. Otherwise, just decrementing the number of + scores suffices, since the smallest is at the end. */ if (scorecount > MAX_SCORES) - scorecount -= (scorecount - MAX_SCORES); - if (reverse) - scores += (scorecount - MAX_SCORES); + { + if (reverse) + scores += (scorecount - MAX_SCORES); + scorecount = MAX_SCORES; + } if (write_scores (scorefile, scores, scorecount) < 0) { unlock_file (scorefile, lockstate); @@ -258,7 +244,7 @@ main (int argc, char **argv) exit (EXIT_SUCCESS); } -int +static int read_score (FILE *f, struct score_entry *score) { int c; @@ -342,7 +328,7 @@ read_score (FILE *f, struct score_entry *score) return 0; } -int +static int read_scores (const char *filename, struct score_entry **scores, int *count) { int readval, scorecount, cursize; @@ -357,7 +343,7 @@ read_scores (const char *filename, struct score_entry **scores, int *count) return -1; while ((readval = read_score (f, &ret[scorecount])) == 0) { - /* We encoutered an error */ + /* We encountered an error. */ if (readval < 0) return -1; scorecount++; @@ -375,7 +361,7 @@ read_scores (const char *filename, struct score_entry **scores, int *count) return 0; } -int +static int score_compare (const void *a, const void *b) { const struct score_entry *sa = (const struct score_entry *) a; @@ -383,7 +369,7 @@ score_compare (const void *a, const void *b) return (sb->score > sa->score) - (sb->score < sa->score); } -int +static int score_compare_reverse (const void *a, const void *b) { const struct score_entry *sa = (const struct score_entry *) a; @@ -407,14 +393,14 @@ push_score (struct score_entry **scores, int *count, int newscore, char *usernam return 0; } -void +static void sort_scores (struct score_entry *scores, int count, int reverse) { qsort (scores, count, sizeof (struct score_entry), reverse ? score_compare_reverse : score_compare); } -int +static int write_scores (const char *filename, const struct score_entry *scores, int count) { FILE *f; @@ -443,7 +429,7 @@ write_scores (const char *filename, const struct score_entry *scores, int count) return 0; } -int +static int lock_file (const char *filename, void **state) { int fd; @@ -484,7 +470,7 @@ lock_file (const char *filename, void **state) return 0; } -int +static int unlock_file (const char *filename, void *state) { char *lockpath = (char *) state;