Module Name: src Committed By: christos Date: Fri Aug 1 14:01:30 UTC 2014
Modified Files: src/usr.bin: Makefile src/usr.bin/timeout: Makefile timeout.1 timeout.c Log Message: PR/49053: Kamil Rytarowski: Import timeout(1) from FreeBSD To generate a diff of this commit: cvs rdiff -u -r1.217 -r1.218 src/usr.bin/Makefile cvs rdiff -u -r1.1.1.1 -r1.2 src/usr.bin/timeout/Makefile \ src/usr.bin/timeout/timeout.1 src/usr.bin/timeout/timeout.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/Makefile diff -u src/usr.bin/Makefile:1.217 src/usr.bin/Makefile:1.218 --- src/usr.bin/Makefile:1.217 Tue Apr 15 18:09:27 2014 +++ src/usr.bin/Makefile Fri Aug 1 10:01:30 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.217 2014/04/15 22:09:27 ginsbach Exp $ +# $NetBSD: Makefile,v 1.218 2014/08/01 14:01:30 christos Exp $ # from: @(#)Makefile 8.3 (Berkeley) 1/7/94 .include <bsd.own.mk> @@ -26,7 +26,8 @@ SUBDIR= apply asa at audio audiocfg \ rup ruptime rusers rwall rwho \ script sdiff sdpquery sed seq shar shlock \ showmount shuffle sockstat sort spell split stat su systat \ - tabs tail talk tcopy tee telnet tftp tic time tip touch tpfmt tput \ + tabs tail talk tcopy tee telnet tftp tic time timeout tip touch \ + tpfmt tput \ tr true tset tsort tty ul uname unexpand unifdef \ uniq units unvis unzip usbhidaction usbhidctl users utoppya \ uudecode uuencode uuidgen vacation vgrind videoctl vis \ Index: src/usr.bin/timeout/Makefile diff -u src/usr.bin/timeout/Makefile:1.1.1.1 src/usr.bin/timeout/Makefile:1.2 --- src/usr.bin/timeout/Makefile:1.1.1.1 Fri Aug 1 09:50:55 2014 +++ src/usr.bin/timeout/Makefile Fri Aug 1 10:01:30 2014 @@ -1,5 +1,6 @@ +# $NetBSD: Makefile,v 1.2 2014/08/01 14:01:30 christos Exp $ # $FreeBSD: head/usr.bin/timeout/Makefile 268745 2014-07-16 09:55:36Z bapt $ - +WARNS=6 PROG= timeout .include <bsd.prog.mk> Index: src/usr.bin/timeout/timeout.1 diff -u src/usr.bin/timeout/timeout.1:1.1.1.1 src/usr.bin/timeout/timeout.1:1.2 --- src/usr.bin/timeout/timeout.1:1.1.1.1 Fri Aug 1 09:50:55 2014 +++ src/usr.bin/timeout/timeout.1 Fri Aug 1 10:01:30 2014 @@ -1,3 +1,5 @@ +.\" $NetBSD: timeout.1,v 1.2 2014/08/01 14:01:30 christos Exp $ +.\" .\" Copyright (c) 2014 Baptiste Daroussin <b...@freebsd.org> .\" All rights reserved. .\" @@ -112,3 +114,17 @@ exits after receiving a signal, the exit .Sh SEE ALSO .Xr kill 1 , .Xr signal 3 +.Sh HISTORY +A +.Nm +utility appeared in a development branch of +.Fx 11 +and was imported into +.Nx 7 . +The +.Fx +work is compatible with GNU +.Xr timeout 1 +by Padraig Brady, from GNU Coreutils 8.21. The +.Xr timeout 1 +utility first appeared in GNU Coreutils 7.0. Index: src/usr.bin/timeout/timeout.c diff -u src/usr.bin/timeout/timeout.c:1.1.1.1 src/usr.bin/timeout/timeout.c:1.2 --- src/usr.bin/timeout/timeout.c:1.1.1.1 Fri Aug 1 09:50:55 2014 +++ src/usr.bin/timeout/timeout.c Fri Aug 1 10:01:30 2014 @@ -1,3 +1,5 @@ +/* $NetBSD: timeout.c,v 1.2 2014/08/01 14:01:30 christos Exp $ */ + /*- * Copyright (c) 2014 Baptiste Daroussin <b...@freebsd.org> * Copyright (c) 2014 Vsevolod Stakhov <vsevo...@freebsd.org> @@ -26,7 +28,13 @@ */ #include <sys/cdefs.h> +#if !defined(lint) +#if 0 __FBSDID("$FreeBSD: head/usr.bin/timeout/timeout.c 268763 2014-07-16 13:52:05Z bapt $"); +#else +__RCSID("$NetBSD: timeout.c,v 1.2 2014/08/01 14:01:30 christos Exp $"); +#endif +#endif /* not lint */ #include <sys/time.h> #include <sys/wait.h> @@ -34,6 +42,7 @@ __FBSDID("$FreeBSD: head/usr.bin/timeout #include <err.h> #include <errno.h> #include <getopt.h> +#include <limits.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> @@ -49,7 +58,7 @@ static sig_atomic_t sig_term = 0; static sig_atomic_t sig_alrm = 0; static sig_atomic_t sig_ign = 0; -static void +static void __dead usage(void) { @@ -101,21 +110,34 @@ parse_duration(const char *duration) static int parse_signal(const char *str) { - int sig, i; - const char *errstr; - - sig = strtonum(str, 0, sys_nsig, &errstr); + long sig; + int i; + char *ep; - if (errstr == NULL) - return (sig); - if (strncasecmp(str, "SIG", 3) == 0) + if (strncasecmp(str, "SIG", 3) == 0) { str += 3; - for (i = 1; i < sys_nsig; i++) { - if (strcasecmp(str, sys_signame[i]) == 0) - return (i); + for (i = 1; i < sys_nsig; i++) { + if (strcasecmp(str, sys_signame[i]) == 0) + return (i); + } + + goto err; } + errno = 0; + sig = strtol(str, &ep, 10); + + if (str[0] == '\0' || *ep != '\0') + goto err; + if (errno == ERANGE && (sig == INT_MAX || sig == INT_MIN)) + goto err; + if (sig >= sys_nsig || sig < 0) + goto err; + + return (int)sig; + +err: errx(EX_USAGE, "invalid signal"); } @@ -151,7 +173,7 @@ set_interval(double iv) memset(&tim, 0, sizeof(tim)); tim.it_value.tv_sec = (time_t)iv; - iv -= (time_t)iv; + iv -= (double)tim.it_value.tv_sec; tim.it_value.tv_usec = (suseconds_t)(iv * 1000000UL); if (setitimer(ITIMER_REAL, &tim, NULL) == -1) @@ -182,6 +204,8 @@ main(int argc, char **argv) SIGQUIT, }; + setprogname(argv[0]); + foreground = preserve = 0; second_kill = 0; cpid = -1;