pwait: Fix timeout unit parser
The timeout parser would check the first character after the number and ignore any subsequent ones. While here, switch to bool for booleans and fix some style nits. MFC after: 1 week Reviewed by: 0mp, markj Differential Revision: https://reviews.freebsd.org/D52612
This commit is contained in:
+18
-12
@@ -39,6 +39,7 @@
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -48,7 +49,6 @@
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
||||
fprintf(stderr, "usage: pwait [-t timeout] [-ov] pid ...\n");
|
||||
exit(EX_USAGE);
|
||||
}
|
||||
@@ -61,15 +61,15 @@ main(int argc, char *argv[])
|
||||
{
|
||||
struct itimerval itv;
|
||||
struct kevent *e;
|
||||
int oflag, tflag, verbose;
|
||||
int i, kq, n, nleft, opt, status;
|
||||
long pid;
|
||||
char *end, *s;
|
||||
double timeout;
|
||||
long pid;
|
||||
int i, kq, n, nleft, opt, status;
|
||||
bool oflag, tflag, verbose;
|
||||
|
||||
oflag = 0;
|
||||
tflag = 0;
|
||||
verbose = 0;
|
||||
oflag = false;
|
||||
tflag = false;
|
||||
verbose = false;
|
||||
memset(&itv, 0, sizeof(itv));
|
||||
|
||||
while ((opt = getopt(argc, argv, "ot:v")) != -1) {
|
||||
@@ -78,25 +78,31 @@ main(int argc, char *argv[])
|
||||
oflag = 1;
|
||||
break;
|
||||
case 't':
|
||||
tflag = 1;
|
||||
tflag = true;
|
||||
errno = 0;
|
||||
timeout = strtod(optarg, &end);
|
||||
if (end == optarg || errno == ERANGE || timeout < 0) {
|
||||
errx(EX_DATAERR, "timeout value");
|
||||
}
|
||||
switch(*end) {
|
||||
case 0:
|
||||
switch (*end) {
|
||||
case '\0':
|
||||
break;
|
||||
case 's':
|
||||
end++;
|
||||
break;
|
||||
case 'h':
|
||||
timeout *= 60;
|
||||
/* FALLTHROUGH */
|
||||
case 'm':
|
||||
timeout *= 60;
|
||||
end++;
|
||||
break;
|
||||
default:
|
||||
errx(EX_DATAERR, "timeout unit");
|
||||
}
|
||||
if (*end != '\0') {
|
||||
errx(EX_DATAERR, "timeout unit");
|
||||
}
|
||||
if (timeout > 100000000L) {
|
||||
errx(EX_DATAERR, "timeout value");
|
||||
}
|
||||
@@ -106,7 +112,7 @@ main(int argc, char *argv[])
|
||||
(suseconds_t)(timeout * 1000000UL);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
verbose = true;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
@@ -134,7 +140,7 @@ main(int argc, char *argv[])
|
||||
for (n = 0; n < argc; n++) {
|
||||
s = argv[n];
|
||||
/* Undocumented Solaris compat */
|
||||
if (!strncmp(s, "/proc/", 6)) {
|
||||
if (strncmp(s, "/proc/", 6) == 0) {
|
||||
s += 6;
|
||||
}
|
||||
errno = 0;
|
||||
|
||||
Reference in New Issue
Block a user