svn commit: r210827 - head/games/grdc
Ulrich Spoerlein
uqs at FreeBSD.org
Tue Aug 3 20:56:24 UTC 2010
Author: uqs
Date: Tue Aug 3 20:56:23 2010
New Revision: 210827
URL: http://svn.freebsd.org/changeset/base/210827
Log:
grdc(6): de-obfuscate the timekeeping of now/delay
- 'now' only contains current time readings
- delay is only used as parameter to nanosleep
- prev_sec contains the time_t of the previous loop iteration
Submitted by: bde
MFC after: 2 weeks
Modified:
head/games/grdc/grdc.c
Modified: head/games/grdc/grdc.c
==============================================================================
--- head/games/grdc/grdc.c Tue Aug 3 19:25:58 2010 (r210826)
+++ head/games/grdc/grdc.c Tue Aug 3 20:56:23 2010 (r210827)
@@ -55,6 +55,7 @@ int
main(int argc, char *argv[])
{
struct timespec delay;
+ time_t prev_sec;
long t, a;
int i, j, s, k;
int n;
@@ -138,6 +139,7 @@ main(int argc, char *argv[])
attrset(COLOR_PAIR(2));
}
clock_gettime(CLOCK_REALTIME_FAST, &now);
+ prev_sec = now.tv_sec;
do {
mask = 0;
tm = localtime(&now.tv_sec);
@@ -194,20 +196,20 @@ main(int argc, char *argv[])
}
movto(6, 0);
refresh();
- clock_gettime(CLOCK_REALTIME_FAST, &delay);
- if (delay.tv_sec == now.tv_sec) {
+ 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 - delay.tv_nsec;
+ delay.tv_nsec = 1000000000 - now.tv_nsec;
} else {
delay.tv_sec = 1;
delay.tv_nsec = 0;
}
nanosleep(&delay, NULL);
- clock_gettime(CLOCK_REALTIME_FAST, &delay);
+ clock_gettime(CLOCK_REALTIME_FAST, &now);
}
- n -= delay.tv_sec - now.tv_sec;
- now.tv_sec = delay.tv_sec;
+ n -= now.tv_sec - prev_sec;
+ prev_sec = now.tv_sec;
if (sigtermed) {
standend();
clear();
More information about the svn-src-head
mailing list