From nobody Fri Feb 13 16:01:42 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fCH3V75gDz6S3TV for ; Fri, 13 Feb 2026 16:01:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fCH3V6KYsz3jNg for ; Fri, 13 Feb 2026 16:01:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770998502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=R5Ywq9bLAfW4cazQB0cOsvsWAeE7bvwuzLCXssDBOqo=; b=Zz9RJJPddbgrxbBIu0/JIE4rl012NhEt8+1GA/SiY1V3E1G6odFBnUtsHmppvYWNBAhdl+ p9m85GHIhT1rQhERc2i3i5Qx/d5OwHre4OJl9YFVxN186+8PP0SO8wVaSGFFMDUn6s0A+o N6GJ9mbFah+5j/hV9gsaxWUXOwG2by2sodCStBDSGZm/maFfJpRH6uAJC7CHypTDPg7QUs LeIqxViw2VlNX/trnZ1ToC6hNBsnqVW+dgJAswystqBBzWghjT1lXiEr6+Th38apZqZ6rV nZ/y/rikKdFj0AhosrP0YCg8xGl/ZCP95CWvXGk+deDC2KIOIYkIeSmmllfv9w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770998502; a=rsa-sha256; cv=none; b=Sn/m/N/biFPax+FMAZb7eHUNdRLGI+GLjcWYp5sCQEFKVYNjjavj24yc/OnUqAcvk1Lun2 Ihs+3CzBjSSjbht/e+QySO1ROUYdqFOzhzenfgF+1EDurMdii9hd+TnG9fv+uLW4i13gYT jed1sHMtPrBupelvuqNvvNdtOhpVhfot/DlBhasky/QeGfYlJAyuU9WY4CC/FbEcl8Yl94 V7LN8GTQ0vikRyxotcWgea7C856YGPs+n8gum3qRXIC4wKomQEakrQmwGPEboQYUjPD5Ui T9samMy33E6pYnTucgueylogI6tg+kg0jvhsQPbY+io7xI19bu7VjagfnQlcIQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770998502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=R5Ywq9bLAfW4cazQB0cOsvsWAeE7bvwuzLCXssDBOqo=; b=BS217JEqyMWjytgPK2tNyykh+A1t+qZ5+z53x9tO7aCxygkIlNREw/1SIjys6Tq58SAF40 4PR7uZeEH0uvhovEqPr2XSu0XjjXWD4fZ6Ixm+XnHEtwcopZ18jgwWZU5CJV70lXDT71Nd vt1KOeTq8mwHG+PsdyOpzBvg9ADzdZkBD7KKowHeC5SHr5NQy+XrwqXMOHlAU1rLrsadzv d0AwTdmhBgvumtNzv1s3QnQ1yWxm6wSs2+w9ikT+y2A+QWCLite5ezEBNJq+qpmAUhOYVF HJWmf77LPWqK1BhuwvxBw6exta7FLgEQk7Sa8rTr1Q6TLQVeXOBOsfD1xILT/Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fCH3V5wt1zCj7 for ; Fri, 13 Feb 2026 16:01:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22e20 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 13 Feb 2026 16:01:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 3cbdcabf714d - main - ngctl: Modernize code somewhat List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3cbdcabf714d5187e22d8ff1cbfbc261dc8622eb Auto-Submitted: auto-generated Date: Fri, 13 Feb 2026 16:01:42 +0000 Message-Id: <698f4ae6.22e20.59da6769@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=3cbdcabf714d5187e22d8ff1cbfbc261dc8622eb commit 3cbdcabf714d5187e22d8ff1cbfbc261dc8622eb Author: Dag-Erling Smørgrav AuthorDate: 2026-02-13 15:57:40 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-02-13 15:57:58 +0000 ngctl: Modernize code somewhat * Replace fgets(3) with getline(3) * Replace select(2) with poll(2) * Avoid needlessly copying text around * Correct use of getopt(3) * Pick some style and whitespace nits MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D55257 --- usr.sbin/ngctl/config.c | 9 +- usr.sbin/ngctl/connect.c | 6 +- usr.sbin/ngctl/debug.c | 6 +- usr.sbin/ngctl/dot.c | 7 +- usr.sbin/ngctl/list.c | 14 ++- usr.sbin/ngctl/main.c | 243 ++++++++++++++++++++++------------------------ usr.sbin/ngctl/mkpeer.c | 6 +- usr.sbin/ngctl/msg.c | 39 +++----- usr.sbin/ngctl/name.c | 6 +- usr.sbin/ngctl/rmhook.c | 6 +- usr.sbin/ngctl/show.c | 9 +- usr.sbin/ngctl/shutdown.c | 7 +- usr.sbin/ngctl/status.c | 10 +- usr.sbin/ngctl/types.c | 6 +- usr.sbin/ngctl/write.c | 10 +- 15 files changed, 168 insertions(+), 216 deletions(-) diff --git a/usr.sbin/ngctl/config.c b/usr.sbin/ngctl/config.c index 261bc950f570..25cd841494d1 100644 --- a/usr.sbin/ngctl/config.c +++ b/usr.sbin/ngctl/config.c @@ -3,7 +3,7 @@ * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -14,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -94,8 +94,8 @@ ConfigCmd(int ac, char **av) return (CMDRTN_ERROR); } } else { - if (NgRecvMsg(csock, resp, sizeof(sbuf), NULL) < 0 - || (resp->header.flags & NGF_RESP) == 0) + if (NgRecvMsg(csock, resp, sizeof(sbuf), NULL) < 0 || + (resp->header.flags & NGF_RESP) == 0) nostat = 1; } @@ -106,4 +106,3 @@ ConfigCmd(int ac, char **av) printf("Config for \"%s\":\n%s\n", path, status); return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/connect.c b/usr.sbin/ngctl/connect.c index 7f538e0a442d..c3e7d0b5a1b4 100644 --- a/usr.sbin/ngctl/connect.c +++ b/usr.sbin/ngctl/connect.c @@ -1,10 +1,9 @@ - /* * connect.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -85,4 +84,3 @@ ConnectCmd(int ac, char **av) } return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/debug.c b/usr.sbin/ngctl/debug.c index bbc329acdcd2..1f64dfd466e9 100644 --- a/usr.sbin/ngctl/debug.c +++ b/usr.sbin/ngctl/debug.c @@ -1,10 +1,9 @@ - /* * debug.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -79,4 +78,3 @@ DebugCmd(int ac, char **av) } return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/dot.c b/usr.sbin/ngctl/dot.c index 95132a5d0785..9893dc27f845 100644 --- a/usr.sbin/ngctl/dot.c +++ b/usr.sbin/ngctl/dot.c @@ -1,4 +1,3 @@ - /* * dot.c * @@ -6,7 +5,7 @@ * Copyright (c) 2004 Brian Fundakowski Feldman * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -17,7 +16,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -71,13 +70,13 @@ DotCmd(int ac, char **av) u_int i; /* Get options */ + optreset = 1; optind = 1; while ((ch = getopt(ac, av, "c")) != -1) { switch (ch) { case 'c': compact = 1; break; - case '?': default: return (CMDRTN_USAGE); break; diff --git a/usr.sbin/ngctl/list.c b/usr.sbin/ngctl/list.c index d13de1c4c57f..77fc7a4bbcf5 100644 --- a/usr.sbin/ngctl/list.c +++ b/usr.sbin/ngctl/list.c @@ -1,10 +1,9 @@ - /* * list.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -70,6 +69,7 @@ ListCmd(int ac, char **av) int ch, rtn = CMDRTN_OK; /* Get options */ + optreset = 1; optind = 1; while ((ch = getopt(ac, av, "ln")) != -1) { switch (ch) { @@ -79,7 +79,6 @@ ListCmd(int ac, char **av) case 'n': named_only = 1; break; - case '?': default: return (CMDRTN_USAGE); break; @@ -114,11 +113,11 @@ ListCmd(int ac, char **av) ninfo = nlist->nodeinfo; if (list_hooks) { char path[NG_PATHSIZ]; - char *argv[2] = { "show", path }; + char *argv[] = { "show", path, NULL }; while (nlist->numnames > 0) { - snprintf(path, sizeof(path), - "[%lx]:", (u_long)ninfo->id); + snprintf(path, sizeof(path), "[%lx]:", + (unsigned long)ninfo->id); if ((rtn = (*show_cmd.func)(2, argv)) != CMDRTN_OK) break; ninfo++; @@ -143,4 +142,3 @@ ListCmd(int ac, char **av) free(resp); return (rtn); } - diff --git a/usr.sbin/ngctl/main.c b/usr.sbin/ngctl/main.c index b86f1ca27e71..b58de1e042b3 100644 --- a/usr.sbin/ngctl/main.c +++ b/usr.sbin/ngctl/main.c @@ -1,10 +1,9 @@ - /* * main.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -39,12 +38,12 @@ #include #include -#include #include #include #include #include +#include #include #include #include @@ -71,7 +70,8 @@ /* Internal functions */ static int ReadFile(FILE *fp); -static void ReadSockets(fd_set *); +static void ReadCtrlSocket(void); +static void ReadDataSocket(void); static int DoParseCommand(const char *line); static int DoCommand(int ac, char **av); static int DoInteractive(void); @@ -146,6 +146,7 @@ main(int ac, char *av[]) FILE *fp = NULL; #ifdef JAIL const char *jail_name = NULL; + int jid; #endif int ch, rtn = 0; @@ -174,7 +175,6 @@ main(int ac, char *av[]) case 'n': snprintf(name, sizeof(name), "%s", optarg); break; - case '?': default: Usage((char *)NULL); break; @@ -185,8 +185,6 @@ main(int ac, char *av[]) #ifdef JAIL if (jail_name != NULL) { - int jid; - if (jail_name[0] == '\0') Usage("invalid jail name"); @@ -239,18 +237,25 @@ main(int ac, char *av[]) static int ReadFile(FILE *fp) { - char line[LINE_MAX]; - int num, rtn; - - for (num = 1; fgets(line, sizeof(line), fp) != NULL; num++) { + char *line = NULL; + ssize_t len; + size_t sz = 0; + unsigned int lineno = 0; + int rtn = CMDRTN_OK; + + while ((len = getline(&line, &sz, fp)) > 0) { + lineno++; if (*line == '#') continue; - if ((rtn = DoParseCommand(line)) != 0) { - warnx("line %d: error in file", num); - return (rtn); + if ((rtn = DoParseCommand(line)) != CMDRTN_OK) { + warnx("line %d: error in file", lineno); + break; } } - return (CMDRTN_OK); + if (len < 0) + rtn = CMDRTN_ERROR; + free(line); + return (rtn); } #ifdef EDITLINE @@ -258,7 +263,6 @@ ReadFile(FILE *fp) static void Unblock(int signal __unused) { - unblock = 1; } @@ -269,8 +273,11 @@ Unblock(int signal __unused) static void * Monitor(void *v __unused) { + struct pollfd pfds[2] = { + { .fd = csock, .events = POLLIN }, + { .fd = dsock, .events = POLLIN }, + }; struct sigaction act; - const int maxfd = MAX(csock, dsock) + 1; act.sa_handler = Unblock; sigemptyset(&act.sa_mask); @@ -279,22 +286,19 @@ Monitor(void *v __unused) pthread_mutex_lock(&mutex); for (;;) { - fd_set rfds; - - /* See if any data or control messages are arriving. */ - FD_ZERO(&rfds); - FD_SET(csock, &rfds); - FD_SET(dsock, &rfds); unblock = 0; - if (select(maxfd, &rfds, NULL, NULL, NULL) <= 0) { + if (poll(pfds, 2, INFTIM) <= 0) { if (errno == EINTR) { if (unblock == 1) pthread_cond_wait(&cond, &mutex); continue; } - err(EX_OSERR, "select"); + err(EX_OSERR, "poll"); } - ReadSockets(&rfds); + if (pfds[0].revents != 0) + ReadCtrlSocket(); + if (pfds[1].revents != 0) + ReadDataSocket(); } return (NULL); @@ -303,7 +307,6 @@ Monitor(void *v __unused) static char * Prompt(EditLine *el __unused) { - return (PROMPT); } @@ -376,49 +379,48 @@ DoInteractive(void) static int DoInteractive(void) { - const int maxfd = MAX(csock, dsock) + 1; + struct pollfd pfds[3] = { + { .fd = csock, .events = POLLIN }, + { .fd = dsock, .events = POLLIN }, + { .fd = STDIN_FILENO, .events = POLLIN }, + }; + char *line = NULL; + ssize_t len; + size_t sz = 0; (*help_cmd.func)(0, NULL); - while (1) { - struct timeval tv; - fd_set rfds; - + for (;;) { /* See if any data or control messages are arriving */ - FD_ZERO(&rfds); - FD_SET(csock, &rfds); - FD_SET(dsock, &rfds); - memset(&tv, 0, sizeof(tv)); - if (select(maxfd, &rfds, NULL, NULL, &tv) <= 0) { - + if (poll(pfds, 2, 0) <= 0) { /* Issue prompt and wait for anything to happen */ printf("%s", PROMPT); fflush(stdout); - FD_ZERO(&rfds); - FD_SET(0, &rfds); - FD_SET(csock, &rfds); - FD_SET(dsock, &rfds); - if (select(maxfd, &rfds, NULL, NULL, NULL) < 0) - err(EX_OSERR, "select"); - - /* If not user input, print a newline first */ - if (!FD_ISSET(0, &rfds)) - printf("\n"); + if (poll(pfds, 3, INFTIM) < 0 && errno != EINTR) + err(EX_OSERR, "poll"); + } else { + pfds[2].revents = 0; } - ReadSockets(&rfds); + /* If not user input, print a newline first */ + if (pfds[2].revents == 0) + printf("\n"); + + if (pfds[0].revents != 0) + ReadCtrlSocket(); + if (pfds[1].revents != 0) + ReadDataSocket(); /* Get any user input */ - if (FD_ISSET(0, &rfds)) { - char buf[LINE_MAX]; - - if (fgets(buf, sizeof(buf), stdin) == NULL) { + if (pfds[2].revents != 0) { + if ((len = getline(&line, &sz, stdin)) <= 0) { printf("\n"); break; } - if (DoParseCommand(buf) == CMDRTN_QUIT) + if (DoParseCommand(line) == CMDRTN_QUIT) break; } } + free(line); return (CMDRTN_QUIT); } #endif /* !EDITLINE */ @@ -427,29 +429,28 @@ DoInteractive(void) * Read and process data on netgraph control and data sockets. */ static void -ReadSockets(fd_set *rfds) +ReadCtrlSocket(void) { - /* Display any incoming control message. */ - if (FD_ISSET(csock, rfds)) - MsgRead(); - - /* Display any incoming data packet. */ - if (FD_ISSET(dsock, rfds)) { - char hook[NG_HOOKSIZ]; - u_char *buf; - int rl; - - /* Read packet from socket. */ - if ((rl = NgAllocRecvData(dsock, &buf, hook)) < 0) - err(EX_OSERR, "reading hook \"%s\"", hook); - if (rl == 0) - errx(EX_OSERR, "EOF from hook \"%s\"?", hook); - - /* Write packet to stdout. */ - printf("Rec'd data packet on hook \"%s\":\n", hook); - DumpAscii(buf, rl); - free(buf); - } + MsgRead(); +} + +static void +ReadDataSocket(void) +{ + char hook[NG_HOOKSIZ]; + u_char *buf; + int rl; + + /* Read packet from socket. */ + if ((rl = NgAllocRecvData(dsock, &buf, hook)) < 0) + err(EX_OSERR, "reading hook \"%s\"", hook); + if (rl == 0) + errx(EX_OSERR, "EOF from hook \"%s\"?", hook); + + /* Write packet to stdout. */ + printf("Rec'd data packet on hook \"%s\":\n", hook); + DumpAscii(buf, rl); + free(buf); } /* @@ -561,6 +562,8 @@ ReadCmd(int ac, char **av) /* Process it */ rtn = ReadFile(fp); + if (ferror(fp)) + warn("%s", av[1]); fclose(fp); return (rtn); } @@ -572,7 +575,9 @@ static int HelpCmd(int ac, char **av) { const struct ngcmd *cmd; - int k; + const char *s; + const int maxcol = 63; + int a, k, len; switch (ac) { case 0: @@ -580,13 +585,11 @@ HelpCmd(int ac, char **av) /* Show all commands */ printf("Available commands:\n"); for (k = 0; cmds[k] != NULL; k++) { - char *s, buf[100]; - cmd = cmds[k]; - snprintf(buf, sizeof(buf), "%s", cmd->cmd); - for (s = buf; *s != '\0' && !isspace(*s); s++); - *s = '\0'; - printf(" %-10s %s\n", buf, cmd->desc); + for (s = cmd->cmd; *s != '\0' && !isspace(*s); s++) + /* nothing */; + printf(" %.*s%*s %s\n", (int)(s - cmd->cmd), cmd->cmd, + (int)(10 - (s - cmd->cmd)), "", cmd->desc); } return (CMDRTN_OK); default: @@ -594,40 +597,29 @@ HelpCmd(int ac, char **av) if ((cmd = FindCommand(av[1])) != NULL) { printf("usage: %s\n", cmd->cmd); if (cmd->aliases[0] != NULL) { - int a = 0; - printf("Aliases: "); - while (1) { - printf("%s", cmd->aliases[a++]); - if (a == MAX_CMD_ALIAS - || cmd->aliases[a] == NULL) { - printf("\n"); - break; - } - printf(", "); + for (a = 0; a < MAX_CMD_ALIAS && + cmd->aliases[a] != NULL; a++) { + if (a > 0) + printf(", "); + printf("%s", cmd->aliases[a]); } + printf("\n"); } printf("Summary: %s\n", cmd->desc); - if (cmd->help != NULL) { - const char *s; - char buf[65]; - int tot, len, done; - - printf("Description:\n"); - for (s = cmd->help; *s != '\0'; s += len) { - while (isspace(*s)) - s++; - tot = snprintf(buf, - sizeof(buf), "%s", s); - len = strlen(buf); - done = len == tot; - if (!done) { - while (len > 0 - && !isspace(buf[len-1])) - buf[--len] = '\0'; - } - printf(" %s\n", buf); - } + if (cmd->help == NULL) + break; + printf("Description:\n"); + for (s = cmd->help; *s != '\0'; s += len) { + while (isspace(*s)) + s++; + /* advance to the column limit */ + for (len = 0; s[len] && len < maxcol; len++) + /* nothing */; + /* back up to previous interword space */ + while (len > 0 && s[len] && !isblank(s[len])) + len--; + printf(" %.*s\n", len, s); } } } @@ -649,34 +641,27 @@ QuitCmd(int ac __unused, char **av __unused) void DumpAscii(const u_char *buf, int len) { - char ch, sbuf[100]; int k, count; for (count = 0; count < len; count += DUMP_BYTES_PER_LINE) { - snprintf(sbuf, sizeof(sbuf), "%04x: ", count); + printf("%04x: ", count); for (k = 0; k < DUMP_BYTES_PER_LINE; k++) { if (count + k < len) { - snprintf(sbuf + strlen(sbuf), - sizeof(sbuf) - strlen(sbuf), - "%02x ", buf[count + k]); + printf("%02x ", buf[count + k]); } else { - snprintf(sbuf + strlen(sbuf), - sizeof(sbuf) - strlen(sbuf), " "); + printf(" "); } } - snprintf(sbuf + strlen(sbuf), sizeof(sbuf) - strlen(sbuf), " "); + printf(" "); for (k = 0; k < DUMP_BYTES_PER_LINE; k++) { if (count + k < len) { - ch = isprint(buf[count + k]) ? - buf[count + k] : '.'; - snprintf(sbuf + strlen(sbuf), - sizeof(sbuf) - strlen(sbuf), "%c", ch); + printf("%c", isprint(buf[count + k]) ? + buf[count + k] : '.'); } else { - snprintf(sbuf + strlen(sbuf), - sizeof(sbuf) - strlen(sbuf), " "); + printf(" "); } } - printf("%s\n", sbuf); + printf("\n"); } } diff --git a/usr.sbin/ngctl/mkpeer.c b/usr.sbin/ngctl/mkpeer.c index b16260a7cce1..5884c898a165 100644 --- a/usr.sbin/ngctl/mkpeer.c +++ b/usr.sbin/ngctl/mkpeer.c @@ -1,10 +1,9 @@ - /* * mkpeer.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -85,4 +84,3 @@ MkPeerCmd(int ac, char **av) } return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/msg.c b/usr.sbin/ngctl/msg.c index 2cc733408380..3be10293e82b 100644 --- a/usr.sbin/ngctl/msg.c +++ b/usr.sbin/ngctl/msg.c @@ -1,10 +1,9 @@ - /* * msg.c * * Copyright (c) 1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -37,9 +36,9 @@ * $Whistle: msg.c,v 1.2 1999/11/29 23:38:35 archie Exp $ */ -#include #include #include +#include #include #include #include @@ -64,6 +63,9 @@ const struct ngcmd msg_cmd = { static int MsgCmd(int ac, char **av) { + struct pollfd pfds[1] = { + { .fd = csock, .events = POLLIN }, + }; char *buf; char *path, *cmdstr; int i, len; @@ -95,22 +97,14 @@ MsgCmd(int ac, char **av) free(buf); /* See if a synchronous reply awaits */ - { - struct timeval tv; - fd_set rfds; - - FD_ZERO(&rfds); - FD_SET(csock, &rfds); - memset(&tv, 0, sizeof(tv)); - switch (select(csock + 1, &rfds, NULL, NULL, &tv)) { - case -1: - err(EX_OSERR, "select"); - case 0: - break; - default: - MsgRead(); - break; - } + switch (poll(pfds, 1, 0)) { + case -1: + err(EX_OSERR, "poll"); + case 0: + break; + default: + MsgRead(); + break; } /* Done */ @@ -135,8 +129,8 @@ MsgRead(void) /* Ask originating node to convert message to ASCII */ if (NgSendMsg(csock, path, NGM_GENERIC_COOKIE, - NGM_BINARY2ASCII, m, sizeof(*m) + m->header.arglen) < 0 - || NgAllocRecvMsg(csock, &m2, NULL) < 0) { + NGM_BINARY2ASCII, m, sizeof(*m) + m->header.arglen) < 0 || + NgAllocRecvMsg(csock, &m2, NULL) < 0) { printf("Rec'd %s %d from \"%s\":\n", (m->header.flags & NGF_RESP) != 0 ? "response" : "command", m->header.cmd, path); @@ -160,4 +154,3 @@ MsgRead(void) printf("No arguments\n"); free(m2); } - diff --git a/usr.sbin/ngctl/name.c b/usr.sbin/ngctl/name.c index 79ddcad2f0c7..56c2040c3961 100644 --- a/usr.sbin/ngctl/name.c +++ b/usr.sbin/ngctl/name.c @@ -1,10 +1,9 @@ - /* * name.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -76,4 +75,3 @@ NameCmd(int ac, char **av) } return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/rmhook.c b/usr.sbin/ngctl/rmhook.c index 5591d39cb078..d8fbbec18579 100644 --- a/usr.sbin/ngctl/rmhook.c +++ b/usr.sbin/ngctl/rmhook.c @@ -1,10 +1,9 @@ - /* * rmhook.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -81,4 +80,3 @@ RmHookCmd(int ac, char **av) } return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/show.c b/usr.sbin/ngctl/show.c index 35d1aa2e5192..3536a5c39ae4 100644 --- a/usr.sbin/ngctl/show.c +++ b/usr.sbin/ngctl/show.c @@ -1,10 +1,9 @@ - /* * show.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -67,13 +66,13 @@ ShowCmd(int ac, char **av) int ch, no_hooks = 0; /* Get options */ + optreset = 1; optind = 1; while ((ch = getopt(ac, av, "n")) != -1) { switch (ch) { case 'n': no_hooks = 1; break; - case '?': default: return (CMDRTN_USAGE); break; @@ -133,5 +132,3 @@ ShowCmd(int ac, char **av) free(resp); return (CMDRTN_OK); } - - diff --git a/usr.sbin/ngctl/shutdown.c b/usr.sbin/ngctl/shutdown.c index fd38b9dc152b..9e221d1b0ba5 100644 --- a/usr.sbin/ngctl/shutdown.c +++ b/usr.sbin/ngctl/shutdown.c @@ -1,10 +1,9 @@ - /* * shutdown.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -73,5 +72,3 @@ ShutdownCmd(int ac, char **av) } return (CMDRTN_OK); } - - diff --git a/usr.sbin/ngctl/status.c b/usr.sbin/ngctl/status.c index 10007255d551..3af258f00a7d 100644 --- a/usr.sbin/ngctl/status.c +++ b/usr.sbin/ngctl/status.c @@ -1,10 +1,9 @@ - /* * status.c * * Copyright (c) 1996-1999 Whistle Communications, Inc. * All rights reserved. - * + * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; @@ -15,7 +14,7 @@ * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. - * + * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, @@ -84,8 +83,8 @@ StatusCmd(int ac, char **av) return (CMDRTN_ERROR); } } else { - if (NgRecvMsg(csock, resp, sizeof(sbuf), NULL) < 0 - || (resp->header.flags & NGF_RESP) == 0) + if (NgRecvMsg(csock, resp, sizeof(sbuf), NULL) < 0 || + (resp->header.flags & NGF_RESP) == 0) nostat = 1; } @@ -96,4 +95,3 @@ StatusCmd(int ac, char **av) printf("Status for \"%s\":\n%s\n", path, status); return (CMDRTN_OK); } - diff --git a/usr.sbin/ngctl/types.c b/usr.sbin/ngctl/types.c index 555960a59c02..dbbb8c60c84d 100644 --- a/usr.sbin/ngctl/types.c +++ b/usr.sbin/ngctl/types.c @@ -1,10 +1,9 @@ - /* * types.c *** 62 LINES SKIPPED ***