summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2025-09-23 14:56:04 +0200
committerDag-Erling Smørgrav <des@FreeBSD.org>2025-09-23 14:56:04 +0200
commit3aac05f56620712744cb57d71a0ef42f8d8e3b52 (patch)
treec178d889f8f8808a1f089c5cd2be19b6f123a0a3 /bin
parent5953e7c98427e038500221e885dffa181dcc064b (diff)
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
Diffstat (limited to 'bin')
-rw-r--r--bin/pwait/pwait.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/bin/pwait/pwait.c b/bin/pwait/pwait.c
index 0fae22562607..a78c0bb84ca8 100644
--- a/bin/pwait/pwait.c
+++ b/bin/pwait/pwait.c
@@ -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;