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;

Reply via email to