Increase watch interval.
watch would only use an interval of up to 4294 seconds and silently change to this limit. The 4294 seconds is 2^32/10^6 or how many microseconds fit into unsigned int. This change increases the limit to 2^32 seconds which is approximately 136 years. This should be ok for now. Anything above the old limit now uses sleep() instead of usleep() which only uses integers (so 9999.123 seconds will be 9999 seconds) This bug was first reported in 2006 and included a patch by Stephen Kratzer. The patch was updated to fit the current source. Bug-Debian: http://bugs.debian.org/720445 References: http://sourceforge.net/mailarchive/message.php?msg_id=4335929 Signed-off-by: Craig Small <csmall@enc.com.au>
This commit is contained in:
parent
fd1d13e170
commit
764e27a4dd
13
watch.c
13
watch.c
@ -35,10 +35,9 @@
|
|||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <locale.h>
|
#include <limits.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -47,7 +46,6 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <termios.h>
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#ifdef WITH_WATCH8BIT
|
#ifdef WITH_WATCH8BIT
|
||||||
@ -628,8 +626,8 @@ int main(int argc, char *argv[])
|
|||||||
interval = strtod_or_err(optarg, _("failed to parse argument"));
|
interval = strtod_or_err(optarg, _("failed to parse argument"));
|
||||||
if (interval < 0.1)
|
if (interval < 0.1)
|
||||||
interval = 0.1;
|
interval = 0.1;
|
||||||
if (interval > ~0u / 1000000)
|
if (interval > UINT_MAX)
|
||||||
interval = ~0u / 1000000;
|
interval = UINT_MAX;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
precise_timekeeping = 1;
|
precise_timekeeping = 1;
|
||||||
@ -738,7 +736,10 @@ int main(int argc, char *argv[])
|
|||||||
if (cur_time < next_loop)
|
if (cur_time < next_loop)
|
||||||
usleep(next_loop - cur_time);
|
usleep(next_loop - cur_time);
|
||||||
} else
|
} else
|
||||||
usleep(interval * 1000000);
|
if (interval < UINT_MAX / USECS_PER_SEC)
|
||||||
|
usleep(interval * USECS_PER_SEC);
|
||||||
|
else
|
||||||
|
sleep(interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
endwin();
|
endwin();
|
||||||
|
Loading…
Reference in New Issue
Block a user