From owner-svn-src-stable-8@FreeBSD.ORG Tue Aug 17 16:25:44 2010 Return-Path: Delivered-To: svn-src-stable-8@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D6C4F10656A7; Tue, 17 Aug 2010 16:25:44 +0000 (UTC) (envelope-from uqs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C5C5A8FC0C; Tue, 17 Aug 2010 16:25:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o7HGPihb038028; Tue, 17 Aug 2010 16:25:44 GMT (envelope-from uqs@svn.freebsd.org) Received: (from uqs@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o7HGPi9L038025; Tue, 17 Aug 2010 16:25:44 GMT (envelope-from uqs@svn.freebsd.org) Message-Id: <201008171625.o7HGPi9L038025@svn.freebsd.org> From: Ulrich Spoerlein Date: Tue, 17 Aug 2010 16:25:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r211431 - stable/8/games/grdc X-BeenThere: svn-src-stable-8@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 8-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 Aug 2010 16:25:45 -0000 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 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 -#include -#include #include +#include #include -#ifndef NONPOSIX +#include #include -#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<