summaryrefslogtreecommitdiffstats
path: root/call/call.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2015-06-10 23:09:57 +0200
committerRalf Baechle <ralf@linux-mips.org>2015-06-10 23:35:01 +0200
commit6f894ee6940abe9e82531226704b5ce22429a10d (patch)
treecacc2de746e89a96d4c9be4a6ad538fdbdff632d /call/call.c
parentec37a35b8b76a44f1d6e7ac98ecbf87145c4f7cf (diff)
Call: Fix parsing of the argument of the -T option.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'call/call.c')
-rw-r--r--call/call.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/call/call.c b/call/call.c
index a1cf51c..b0cf956 100644
--- a/call/call.c
+++ b/call/call.c
@@ -19,6 +19,7 @@
#include <sys/types.h>
#include <utime.h>
+#include <limits.h>
#include <time.h>
#include <stdio.h>
#include <ctype.h>
@@ -2352,15 +2353,17 @@ int main(int argc, char **argv)
case 'S':
be_silent = 1;
break;
- case 'T':
- { double f = atof(optarg);
- inactivity_timeout.tv_sec = ((time_t) f) & 0x7fffffff;
- inactivity_timeout.tv_usec = (time_t ) (f - (double ) (time_t ) f);
- if (f < 0.001 || f > (double) (0x7fffffff) || (inactivity_timeout.tv_sec == 0 && inactivity_timeout.tv_usec == 0)) {
- fprintf(stderr, "call: option '-T' must be > 0.001 (1ms) and < 69 years\n");
- return 1;
- }
- inactivity_timeout_is_set = TRUE;
+ case 'T': {
+ double f = atof(optarg);
+
+ inactivity_timeout.tv_sec = f;
+ inactivity_timeout.tv_usec = (f - (long) f) * 1000000;
+
+ if (f < 0.001 || f > (double) LONG_MAX) {
+ fprintf(stderr, "call: option '-T' must be > 0.001 (1ms) and < %ld seconds\n", LONG_MAX);
+ return 1;
+ }
+ inactivity_timeout_is_set = TRUE;
}
break;
case 't':