svn commit: r210755 - head/games/grdc
Ulrich Spoerlein
uqs at FreeBSD.org
Mon Aug 2 12:15:22 UTC 2010
Author: uqs
Date: Mon Aug 2 12:15:22 2010
New Revision: 210755
URL: http://svn.freebsd.org/changeset/base/210755
Log:
grdc(6): fix timekeeping for user-supplied value n
- Keep timespec 'now' and 'delay' separate to avoid confusion
- Increase user-supplied n to run _at least_ n seconds, not max n
PR: bin/149130 (based on)
Submitted by: Andy Farkas
MFC after: 2 weeks
Modified:
head/games/grdc/grdc.c
Modified: head/games/grdc/grdc.c
==============================================================================
--- head/games/grdc/grdc.c Mon Aug 2 12:14:17 2010 (r210754)
+++ head/games/grdc/grdc.c Mon Aug 2 12:15:22 2010 (r210755)
@@ -29,7 +29,7 @@
#define YDEPTH 7
/* it won't be */
-time_t now; /* yeah! */
+struct timespec now; /* yeah! */
struct tm *tm;
short disp[11] = {
@@ -57,7 +57,7 @@ sighndl(int signo)
int
main(int argc, char *argv[])
{
- struct timespec ts;
+ struct timespec delay;
long t, a;
int i, j, s, k;
int n;
@@ -89,7 +89,7 @@ main(int argc, char *argv[])
}
if (argc > 0)
- n = atoi(*argv);
+ n = atoi(*argv) + 1;
else
n = 0;
@@ -135,10 +135,10 @@ main(int argc, char *argv[])
attrset(COLOR_PAIR(2));
}
- time(&now);
+ clock_gettime(CLOCK_REALTIME_FAST, &now);
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);
@@ -192,19 +192,16 @@ main(int argc, char *argv[])
}
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;
- } else {
- ts.tv_sec = 1;
- ts.tv_nsec = 0;
- }
- nanosleep(&ts, NULL);
- now = ts.tv_sec + 1;
- } else
- now = ts.tv_sec;
+ clock_gettime(CLOCK_REALTIME_FAST, &now);
+ if (delay.tv_nsec > 0) {
+ delay.tv_sec = 0;
+ delay.tv_nsec = 1000000000 - now.tv_nsec;
+ } else {
+ delay.tv_sec = 1;
+ delay.tv_nsec = 0;
+ }
+ nanosleep(&delay, NULL);
+ now.tv_sec++;
if (sigtermed) {
standend();
clear();
More information about the svn-src-all
mailing list