svn commit: r211431 - stable/8/games/grdc

Ulrich Spoerlein uqs at FreeBSD.org
Tue Aug 17 16:25:45 UTC 2010


Author: uqs
Date: Tue Aug 17 16:25:44 2010
New Revision: 211431
URL: http://svn.freebsd.org/changeset/base/211431

Log:
  MFC r203920,210755,210809,210827:
  
  - WARNS?=6 cleanup
  - fix timekeeping for user-supplied value n
  - de-obfuscate the timekeeping of now/delay

Modified:
  stable/8/games/grdc/Makefile
  stable/8/games/grdc/grdc.c
Directory Properties:
  stable/8/games/grdc/   (props changed)

Modified: stable/8/games/grdc/Makefile
==============================================================================
--- stable/8/games/grdc/Makefile	Tue Aug 17 15:44:52 2010	(r211430)
+++ stable/8/games/grdc/Makefile	Tue Aug 17 16:25:44 2010	(r211431)
@@ -1,9 +1,9 @@
 # $FreeBSD$
 
-PROG=   grdc
-WARNS?=	2
-MAN=   grdc.6
-DPADD=  ${LIBNCURSES}
-LDADD=  -lncurses
+PROG=	grdc
+MAN=	grdc.6
+WARNS?=	6
+DPADD=	${LIBNCURSES}
+LDADD=	-lncurses
 
 .include <bsd.prog.mk>

Modified: stable/8/games/grdc/grdc.c
==============================================================================
--- stable/8/games/grdc/grdc.c	Tue Aug 17 15:44:52 2010	(r211430)
+++ stable/8/games/grdc/grdc.c	Tue Aug 17 16:25:44 2010	(r211431)
@@ -15,21 +15,18 @@
  */
 
 #include <err.h>
-#include <time.h>
-#include <signal.h>
 #include <ncurses.h>
+#include <signal.h>
 #include <stdlib.h>
-#ifndef NONPOSIX
+#include <time.h>
 #include <unistd.h>
-#endif
 
 #define YBASE	10
 #define XBASE	10
 #define XLENGTH 58
 #define YDEPTH  7
 
-/* it won't be */
-time_t now; /* yeah! */
+struct timespec now;
 struct tm *tm;
 
 short disp[11] = {
@@ -48,24 +45,23 @@ void movto(int, int);
 void sighndl(int);
 void usage(void);
 
-void sighndl(signo)
-int signo;
+void
+sighndl(int signo)
 {
 	sigtermed=signo;
 }
 
 int
-main(argc, argv)
-int argc;
-char **argv;
-{
-struct timespec ts;
-long t, a;
-int i, j, s, k;
-int n;
-int ch;
-int scrol;
-int t12;
+main(int argc, char *argv[])
+{
+	struct timespec delay;
+	time_t prev_sec;
+	long t, a;
+	int i, j, s, k;
+	int n;
+	int ch;
+	int scrol;
+	int t12;
 
 	t12 = scrol = 0;
 
@@ -90,9 +86,14 @@ int t12;
 		/* NOTREACHED */
 	}
 
-	if (argc > 0)
-		n = atoi(*argv);
-	else
+	if (argc > 0) {
+		n = atoi(*argv) + 1;
+		if (n < 1) {
+			warnx("number of seconds is out of range");
+			usage();
+			/* NOTREACHED */
+		}
+	} else
 		n = 0;
 
 	initscr();
@@ -137,10 +138,11 @@ int t12;
 
 		attrset(COLOR_PAIR(2));
 	}
-	time(&now);
+	clock_gettime(CLOCK_REALTIME_FAST, &now);
+	prev_sec = now.tv_sec;
 	do {
 		mask = 0;
-		tm = localtime(&now);
+		tm = localtime(&now.tv_sec);
 		set(tm->tm_sec%10, 0);
 		set(tm->tm_sec/10, 4);
 		set(tm->tm_min%10, 10);
@@ -194,19 +196,20 @@ int t12;
 		}
 		movto(6, 0);
 		refresh();
-		clock_gettime(CLOCK_REALTIME_FAST, &ts);
-		if (ts.tv_sec == now) {
-			if (ts.tv_nsec > 0) {
-				ts.tv_sec = 0;
-				ts.tv_nsec = 1000000000 - ts.tv_nsec;
+		clock_gettime(CLOCK_REALTIME_FAST, &now);
+		if (now.tv_sec == prev_sec) {
+			if (delay.tv_nsec > 0) {
+				delay.tv_sec = 0;
+				delay.tv_nsec = 1000000000 - now.tv_nsec;
 			} else {
-				ts.tv_sec = 1;
-				ts.tv_nsec = 0;
+				delay.tv_sec = 1;
+				delay.tv_nsec = 0;
 			}
-			nanosleep(&ts, NULL);
-			now = ts.tv_sec + 1;
-		} else
-			now = ts.tv_sec;
+			nanosleep(&delay, NULL);
+			clock_gettime(CLOCK_REALTIME_FAST, &now);
+		}
+		n -= now.tv_sec - prev_sec;
+		prev_sec = now.tv_sec;
 		if (sigtermed) {
 			standend();
 			clear();
@@ -214,7 +217,7 @@ int t12;
 			endwin();
 			errx(1, "terminated by signal %d", (int)sigtermed);
 		}
-	} while(--n);
+	} while (n);
 	standend();
 	clear();
 	refresh();
@@ -225,7 +228,7 @@ int t12;
 void
 set(int t, int n)
 {
-int i, m;
+	int i, m;
 
 	m = 7<<n;
 	for(i=0; i<5; i++) {


More information about the svn-src-all mailing list