From nobody Wed May 27 09:03:44 2026 X-Original-To: dev-commits-src-all@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 4gQNvj0pJ4z6fhB4 for ; Wed, 27 May 2026 09:03:45 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gQNvh5Rfvz3X2V for ; Wed, 27 May 2026 09:03:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779872624; 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=UV3tRgPRRyApQKj3EkdPKSXPSQ+fnbesAgg24XW04GA=; b=h5hWd+ntoVwdzYqnVgMVXoLlXJ8yqaK3eKRYgIF4cun5D+2DwAjeg9WhB4SN2Ctj6NiSit SxHs3ZTcSnxGt+99+kZZ6+4Qe681aIa0O9WbED0g13WBKj4K923ohUsSZw5OfyptxKszFy WnS4TviDpDWck/CdmxeEYkTLVnlUf7iB9Olsj6QkfrV523GwEIV3/v3cTs5aiq2gKAZugg 8GQew0YK8uLHsEmcBEH1posp1em2Nbmu6Ae24hiOKfRmT8q7fV4ooat8kMi9KtuNMLiV/s aYbb/hMD2x0QXOx+IBXE5Bw3kxeoh0t55tXtlWubA8lqJBvI9niDIoQC4ssnnQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1779872624; a=rsa-sha256; cv=none; b=obN0x6ouagcQzyHcNS09REV/krIWDZm/OdGgaIVp8bO3aecb1F4BpErdNznqYq0aZmhQ9S JsjnSr+kc7UQJmUrQlegnpdVuC4u7//Wwp4wj8xWPG/PZmDR1AYQqJ90H2Vy5UHTs2h+wo Yo8hIopwQgzRIpCK2K+f1HMXZ1IzrKVx7xjNGoKQrp3VM3dbkQwA+UelrF1pLfzAUh86dr 71wp1CuOy3fDiuQysFZx8XlLMMBub6tLL4kZQkNFjA+porX8DkN8B/2JqrFSukIAJW8tVy Q/DvpDQqKM5+HefZ+kRL6j5TR1BBFFqIDR4SFnWEQKZqpUOquh2mPhJtsRNFiQ== 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=1779872624; 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=UV3tRgPRRyApQKj3EkdPKSXPSQ+fnbesAgg24XW04GA=; b=L0+ucfpl01k+RA7612FmwvljULQO/JWRP60uVVKRRW1wlEWXFKCG+GBOeGm5DXSyVBRA/X NYfJ8xq6y96NGVzN8xdpIa8+XqV5TdFtNFwL2ZguResDEGqU0C60bjRriL4lFKNRHCl/bV +M39MF1jnKvDt+GWAHMrI8/XCegytvo/BMiVyQhiV3iHtkktQzPjkeZ6sU7BKSX8zxp0/+ pvET3XxlT9ng5F0WTZa8W2uAyJPD3dMzckEzQ0qgHzvkH4hfMGPqE7OI2xeMHGqGKlFETD YP6HrMg368x3/LzNYw3qpUESBo5uW3AvD+a7JhfLS9slZOl4tNGVqMWWkDqZdg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gQNvh52WKzslw for ; Wed, 27 May 2026 09:03:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26c91 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 27 May 2026 09:03:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 13f6bf4f841c - stable/14 - tftp: Replace fgets with getline List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/stable/14 X-Git-Reftype: branch X-Git-Commit: 13f6bf4f841cc799d97c69e5cea502b764183846 Auto-Submitted: auto-generated Date: Wed, 27 May 2026 09:03:44 +0000 Message-Id: <6a16b370.26c91.42aeea0f@gitrepo.freebsd.org> The branch stable/14 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=13f6bf4f841cc799d97c69e5cea502b764183846 commit 13f6bf4f841cc799d97c69e5cea502b764183846 Author: Dag-Erling Smørgrav AuthorDate: 2026-05-22 17:57:20 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-05-27 09:03:29 +0000 tftp: Replace fgets with getline MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57072 (cherry picked from commit 5fd928cf1cef21e0fc20ab7c2be156a0eeecdf40) --- usr.bin/tftp/main.c | 90 ++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/usr.bin/tftp/main.c b/usr.bin/tftp/main.c index 10343bff412e..3a26903a2076 100644 --- a/usr.bin/tftp/main.c +++ b/usr.bin/tftp/main.c @@ -75,7 +75,6 @@ static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/6/93"; #include "tftp-options.h" #include "tftp.h" -#define MAXLINE (2 * MAXPATHLEN) #define TIMEOUT 5 /* secs between rexmt's */ typedef struct sockaddr_storage peeraddr; @@ -85,7 +84,7 @@ static jmp_buf toplevel; static int txrx_error; static int peer; -#define MAX_MARGV 20 +#define MAX_MARGV 32 static int margc; static char *margv[MAX_MARGV]; @@ -119,7 +118,7 @@ static const char *command_prompt(void); static void urihandling(char *URI); static void getusage(char *); -static void makeargv(char *line); +static void makeargv(char *argv0, char *line); static void putusage(char *); static void settftpmode(const char *); @@ -351,13 +350,13 @@ setpeer0(char *host, const char *lport) static void setpeer(int argc, char *argv[]) { - char line[MAXLINE]; + static char *line; + static size_t sz; if (argc < 2) { - strcpy(line, "Connect "); printf("(to) "); - fgets(&line[strlen(line)], sizeof line - strlen(line), stdin); - makeargv(line); + getline(&line, &sz, stdin); + makeargv(argv[0], line); argc = margc; argv = margv; } @@ -434,17 +433,16 @@ settftpmode(const char *newmode) static void put(int argc, char *argv[]) { - int fd; - int n; - char *cp, *targ, *path; - char line[MAXLINE]; + static char *line; + static size_t sz; + int fd, n; + char *cp, *targ, *path; struct stat sb; if (argc < 2) { - strcpy(line, "send "); printf("(file) "); - fgets(&line[strlen(line)], sizeof line - strlen(line), stdin); - makeargv(line); + getline(&line, &sz, stdin); + makeargv(argv[0], line); argc = margc; argv = margv; } @@ -544,17 +542,15 @@ putusage(char *s) static void get(int argc, char *argv[]) { - int fd; - int n; - char *cp; - char *src; - char line[MAXLINE]; + static char *line; + static size_t sz; + int fd, n; + char *cp, *src; if (argc < 2) { - strcpy(line, "get "); printf("(files) "); - fgets(&line[strlen(line)], sizeof line - strlen(line), stdin); - makeargv(line); + getline(&line, &sz, stdin); + makeargv(argv[0], line); argc = margc; argv = margv; } @@ -634,14 +630,14 @@ getusage(char *s) static void settimeoutpacket(int argc, char *argv[]) { + static char *line; + static size_t sz; int t; - char line[MAXLINE]; if (argc < 2) { - strcpy(line, "Packet timeout "); printf("(value) "); - fgets(&line[strlen(line)], sizeof line - strlen(line), stdin); - makeargv(line); + getline(&line, &sz, stdin); + makeargv(argv[0], line); argc = margc; argv = margv; } @@ -661,14 +657,14 @@ settimeoutpacket(int argc, char *argv[]) static void settimeoutnetwork(int argc, char *argv[]) { + static char *line; + static size_t sz; int t; - char line[MAXLINE]; if (argc < 2) { - strcpy(line, "Network timeout "); printf("(value) "); - fgets(&line[strlen(line)], sizeof line - strlen(line), stdin); - makeargv(line); + getline(&line, &sz, stdin); + makeargv(argv[0], line); argc = margc; argv = margv; } @@ -744,23 +740,22 @@ command_prompt(void) static void command(bool interactive, EditLine *el, History *hist, HistEvent *hep) { + static char *line; + static size_t sz; const struct cmd *c; const char *bp; - char *cp; - int len, num; - char line[MAXLINE]; + int len; for (;;) { if (interactive) { - if ((bp = el_gets(el, &num)) == NULL || num == 0) + if ((bp = el_gets(el, &len)) == NULL || len == 0) exit(0); - len = MIN(MAXLINE, num); - memcpy(line, bp, len); - line[len - 1] = '\0'; - history(hist, hep, H_ENTER, bp); + if ((size_t)len >= sz) + line = realloc(line, sz = len + 1); + strlcpy(line, bp, sz); + history(hist, hep, H_ENTER, line); } else { - line[0] = 0; - if (fgets(line, sizeof line , stdin) == NULL) { + if ((len = getline(&line, &sz, stdin)) <= 0) { if (feof(stdin)) { exit(txrx_error); } else { @@ -768,11 +763,11 @@ command(bool interactive, EditLine *el, History *hist, HistEvent *hep) } } } - if ((cp = strchr(line, '\n'))) - *cp = '\0'; + if (line[len - 1] == '\n') + line[--len] = '\0'; if (line[0] == 0) continue; - makeargv(line); + makeargv(NULL, line); if (margc == 0) continue; c = getcmd(margv[0]); @@ -821,12 +816,16 @@ getcmd(const char *name) * Slice a string up into argc/argv. */ static void -makeargv(char *line) +makeargv(char *argv0, char *line) { char *cp; char **argp = margv; margc = 0; + if (argv0 != NULL) { + *argp++ = argv0; + margc++; + } if ((cp = strchr(line, '\n')) != NULL) *cp = '\0'; for (cp = line; margc < MAX_MARGV - 1 && *cp != '\0';) { @@ -835,13 +834,14 @@ makeargv(char *line) if (*cp == '\0') break; *argp++ = cp; - margc += 1; + margc++; while (*cp != '\0' && !isspace(*cp)) cp++; if (*cp == '\0') break; *cp++ = '\0'; } + /* XXX warn about truncation if *cp != '\0'? */ *argp++ = 0; }