From nobody Wed May 27 09:03:30 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 4gQNvR4qRgz6fhVB for ; Wed, 27 May 2026 09:03:31 +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 4gQNvQ6tg4z3Wvf for ; Wed, 27 May 2026 09:03:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779872611; 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=Oa88mZMn+tk4n/o7bN67gC0ZkPe8gRdMAZslPqfnPm8=; b=X82oxQfHqwLQZUnJ1+jBUx01vpNpUP+hZeX7HiSmwIrEQDNQzUMXkukJ1mIxPsKFBqbAoV 3Yj25eLXL+CRk/+PP34f+maBX1dwgc9uK+VI2pi3hH+XkvlBgdMcmpBUbWnAdFWA19+w8s jUfD/SQ5wunTaPBnuAOcftK+HVuo6eYD4q5CQnVCb+jbJOWX4iT2EwJyU+VEVkQgExHZJC kFOJhUXL1cIJA1k5RBW62YigNH/a9XsZzT6VGx+65oP7kFqvMPF0PUGY9fUb0PQyQFBSE9 SfFdFJZSqJSr4AZpZKx1JkhSyAHXxvWHq85aa4uuJwbAFAOt8Lc/R+oocMEnnA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1779872611; a=rsa-sha256; cv=none; b=lYRV/dqvzFZD4NFkgOU2HEY9yhBVlAHmu9BkUdfYkv4mXsr8GkSz4I14eeTi1qeE+FIlFU Tl5mnnTStj9xuJORCWNvQdBt9sCFra2G+24iUhSRruTamP0fle5si3hUMSXrttcIVCSpQu neQ/SUCwZzgQqIYlpoZD0CiXC5r8+qeVf7m4o5584w/1Bm+IPlfNRNwp95+cIGKTwzrVxA MNMm9K7G3rbljOyUsk+u/OHOrBMXvmfC4KkkzhwMYAA2MAFeFFTFglTWNTbWiuCD6UJlYq 8+KBWE9kc254h2Z7WrycGHp2KvpfVrCPhuVcnEFf5kPJf0jG6+5gGUATQ14QCg== 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=1779872611; 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=Oa88mZMn+tk4n/o7bN67gC0ZkPe8gRdMAZslPqfnPm8=; b=vJ+4MbztQutO4mO0uPgu5rn2HuZ+uUziwSLZs5AAjaf9D1WSXXuoglLRsgXYrvDmcpJTNW 07XwdbTgg6nBacIEJuDJtEbSXs0QURsNnghFArikwKAVi09Y/OIkAuBj0TQTL23fyFTpjS sdAHkD5qm9I5YX3wKgW4WXJ2vTlf/oYlyIPownlQSSmDU0dsZJHbQCAsLGg6vlfXmM6X5i xNwfSORNI/hDnh/ICgPs9DXtNZmf7IXVbtc70wJRYkJ4I63WGm6qhw61C3h4GgwAvSu5Sn MtRERJxnhTk4oNDcD0KPxyltcStYhScLOABEVGU45hW+6ZTKtvlONC4Sa9tQ1g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gQNvQ5p49zs3L for ; Wed, 27 May 2026 09:03:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25b4f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 27 May 2026 09:03:30 +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: 547c9c640e24 - stable/15 - 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/15 X-Git-Reftype: branch X-Git-Commit: 547c9c640e24f81493dbb8c7afce07705f2136a8 Auto-Submitted: auto-generated Date: Wed, 27 May 2026 09:03:30 +0000 Message-Id: <6a16b362.25b4f.30be95ba@gitrepo.freebsd.org> The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=547c9c640e24f81493dbb8c7afce07705f2136a8 commit 547c9c640e24f81493dbb8c7afce07705f2136a8 Author: Dag-Erling Smørgrav AuthorDate: 2026-05-22 17:57:20 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-05-27 09:03:20 +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 02a84f864071..849069fa9e8e 100644 --- a/usr.bin/tftp/main.c +++ b/usr.bin/tftp/main.c @@ -62,7 +62,6 @@ #include "tftp-options.h" #include "tftp.h" -#define MAXLINE (2 * MAXPATHLEN) #define TIMEOUT 5 /* secs between rexmt's */ typedef struct sockaddr_storage peeraddr; @@ -72,7 +71,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]; @@ -106,7 +105,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 *); @@ -338,13 +337,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; } @@ -421,17 +420,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; } @@ -531,17 +529,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; } @@ -621,14 +617,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; } @@ -648,14 +644,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; } @@ -731,23 +727,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 { @@ -755,11 +750,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]); @@ -808,12 +803,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';) { @@ -822,13 +821,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; }