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 <[email protected]>
.\" 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 <[email protected]>
* Copyright (c) 2014 Vsevolod Stakhov <[email protected]>
@@ -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;