/* 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 <walters@debian.org>
#include <unistd.h>
#include <errno.h>
+#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#endif
#include <sys/stat.h>
-
-/* Needed for SunOS4, for instance. */
-extern char *optarg;
-extern int optind, opterr;
-
-static int usage (int err) NO_RETURN;
+#include <getopt.h>
#define MAX_ATTEMPTS 5
#define MAX_SCORES 200
#define difftime(t1, t0) (double)((t1) - (t0))
#endif
-static int
+static _Noreturn void
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");
static int write_scores (const char *filename,
const struct score_entry *scores, int count);
-static void lose (const char *msg) NO_RETURN;
-
-static void
+static _Noreturn void
lose (const char *msg)
{
fprintf (stderr, "%s\n", msg);
exit (EXIT_FAILURE);
}
-static void lose_syserr (const char *msg) NO_RETURN;
-
-/* Taken from sysdep.c. */
-#ifndef HAVE_STRERROR
-#ifndef WINDOWSNT
-char *
-strerror (errnum)
- int errnum;
-{
- extern char *sys_errlist[];
- extern int sys_nerr;
-
- if (errnum >= 0 && errnum < sys_nerr)
- return sys_errlist[errnum];
- return (char *) "Unknown error";
-}
-#endif /* not WINDOWSNT */
-#endif /* ! HAVE_STRERROR */
-
-static void
+static _Noreturn void
lose_syserr (const char *msg)
{
fprintf (stderr, "%s: %s\n", msg, strerror (errno));
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;
return -1;
while ((readval = read_score (f, &ret[scorecount])) == 0)
{
- /* We encoutered an error */
+ /* We encountered an error. */
if (readval < 0)
return -1;
scorecount++;