-/* $NetBSD: log.c,v 1.17 2005/08/10 19:21:21 rpaulo Exp $ */
+/* $NetBSD: log.c,v 1.24 2019/03/19 00:11:34 pgoyette Exp $ */
/*-
* Copyright (c) 1990, 1993
#if 0
static char sccsid[] = "@(#)log.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: log.c,v 1.17 2005/08/10 19:21:21 rpaulo Exp $");
+__RCSID("$NetBSD: log.c,v 1.24 2019/03/19 00:11:34 pgoyette Exp $");
#endif
#endif /* not lint */
-#include "include.h"
+#include <sys/types.h>
+#include <sys/utsname.h>
+#include <sys/stat.h> /* for umask(2) */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <err.h>
+
#include "pathnames.h"
+#include "def.h"
+#include "struct.h"
+#include "extern.h"
+#include "tunable.h"
static FILE *score_fp;
-int
+static int
compar(const void *va, const void *vb)
{
const SCORE *a, *b;
#define MIN(t) (((t) % SECAHOUR) / SECAMIN)
#define SEC(t) ((t) % SECAMIN)
-const char *
+static const char *
timestr(int t)
{
static char s[80];
if (DAY(t) > 0)
- (void)sprintf(s, "%dd+%02dhrs", DAY(t), HOUR(t));
+ (void)snprintf(s, sizeof(s), "%dd+%02dhrs", DAY(t), HOUR(t));
else if (HOUR(t) > 0)
- (void)sprintf(s, "%d:%02d:%02d", HOUR(t), MIN(t), SEC(t));
+ (void)snprintf(s, sizeof(s), "%d:%02d:%02d", HOUR(t), MIN(t),
+ SEC(t));
else if (MIN(t) > 0)
- (void)sprintf(s, "%d:%02d", MIN(t), SEC(t));
+ (void)snprintf(s, sizeof(s), "%d:%02d", MIN(t), SEC(t));
else if (SEC(t) > 0)
- (void)sprintf(s, ":%02d", SEC(t));
+ (void)snprintf(s, sizeof(s), ":%02d", SEC(t));
else
*s = '\0';
int flags;
old_mask = umask(0);
+#if defined(O_NOFOLLOW)
+ score_fd = open(_PATH_SCORE, O_CREAT|O_RDWR|O_NOFOLLOW, 0664);
+#else
score_fd = open(_PATH_SCORE, O_CREAT|O_RDWR, 0664);
+#endif
(void)umask(old_mask);
if (score_fd < 0) {
warn("open %s", _PATH_SCORE);
struct utsname lname;
long offset;
+ if (safe_planes == 1)
+ printf("You directed 1 plane safely to its destination.\n\n");
+ else
+ printf("You directed %d planes safely to their destinations.\n\n",
+ safe_planes);
+
if (score_fp == NULL) {
warnx("no score file available");
return (-1);
if (flock(fileno(score_fp), LOCK_EX) < 0)
#endif
#ifdef SYSV
- while (lockf(fileno(score_fp), F_LOCK, 1) < 0)
+ if (lockf(fileno(score_fp), F_LOCK, 1) < 0)
#endif
{
warn("flock %s", _PATH_SCORE);
(int)getuid());
return (-1);
}
- (void)strcpy(thisscore.name, pw->pw_name);
+ (void)strlcpy(thisscore.name, pw->pw_name, SCORE_NAME_LEN);
(void)uname(&lname);
(void)strlcpy(thisscore.host, lname.nodename,
sizeof(thisscore.host));
return (-1);
}
cp++;
- (void)strcpy(thisscore.game, cp);
+ (void)strlcpy(thisscore.game, cp, SCORE_GAME_LEN);
thisscore.time = clck;
thisscore.planes = safe_planes;
/* ARGSUSED */
void
-log_score_quit(int dummy __attribute__((__unused__)))
+log_score_quit(int dummy __unused)
{
(void)log_score(0);
exit(0);