From nobody Sat Apr 25 17:11:51 2026 X-Original-To: dev-commits-src-branches@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 4g2xFh13Jwz6bqdc for ; Sat, 25 Apr 2026 17:11:52 +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 4g2xFg51l2z3KWp for ; Sat, 25 Apr 2026 17:11:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777137111; 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=5GFbu01Az2fVmPVDm+AWsdPI62igYugo9N6cVv2ia7U=; b=QvUjTm9w/dXFIaBmrPIA4C0c+lm2GLNp89qnl1M4MEI04pO6Z6GXdxYMgmNcCo4QbV3Y4Z LgvucZcbEAdY3f0j0wcf03PFV+1L+sHDseghM/lGF7acPWIO4jF/f49AEv7VDQRMJW+Iic Qvp7kqViaRk9IAM4tcvqaqulmLoXJLRiIdUCKwXQAvY/+TRI58MkhhB21QxvPHZERcDL6u 8maCfoJf5bl0pyXmjHDuHRuHtoQ5tzcoD9s1oFqa36jfjMc5O+kqKB8is4TraLJvnWOYOw EY14H7UwWDvOF/rsri2SmUAcUz9/mKGzOv8/W6Hjk1BbckGDciWFcztlunB7VQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777137111; a=rsa-sha256; cv=none; b=AxqStpehdYJR8aBx2ZQM+V2T9M182pup+tuLLzy5tAE+zpy+6eF2n5aGMLxXbjpzjn0Dwk 1u+kpPZQRV32Xjr6xcd9JXSDlvHRX5Th+aBM/MkiJb8Vu+rsZgmq/Clh8PSSevdlh9zEQi j5Lakki70/gNAvdKfGzukb4UPcofaN1MMDe4GgwB1QxJ7ifPv4ifB1v4p8Adi7FqRqMv9V u7ZRry9wSP56CsXYKFF4WQUljprqUrHx9aHeRLsNGQWwcQJYjkPokqntoyCtyDtDxX8/3p DcW/cDKrGBosfZpUlSdVHabLMzoW9Q81JNythZ4bt2jeJ5K23mj5pykCujeYAg== 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=1777137111; 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=5GFbu01Az2fVmPVDm+AWsdPI62igYugo9N6cVv2ia7U=; b=RjAdwacQpmrUg1JwZ8+10IMKh+7Mzf7ETDje6yFnct2TXL5zWj3xttoS0ntF/jHEzWdNJN d5e2ObjY3QiCNb5ijx4zO+LgPPvlkj2b5U+U4oqRaOxyCQOiZ6C7dUG3AEorrs/bbDl1Ns r4dzexX1uMEq7cXQc6VFgg+B0y3NaOzjJtLA84h2y6FZ0Pi1AlOzyi4K70XFIWt3+ubIgq ftN8SnhicLNnH3PZ8BB7HjCkJA455Jb0naNuc8WA8PxeIRrDGN59l2Taup4GGF+EN7MaGi 3jg/lfmcwKNbnd5zFwSihgNaTIn6VBwZEEqcGv+uMnK3e3lcfhMDS++5qg7OTg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g2xFg4XXXzk77 for ; Sat, 25 Apr 2026 17:11:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1874b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Apr 2026 17:11:51 +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: c28508198f3b - stable/15 - printenv: Clean up List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/15 X-Git-Reftype: branch X-Git-Commit: c28508198f3b6ad6ed8942bfdd59ffd0731551e5 Auto-Submitted: auto-generated Date: Sat, 25 Apr 2026 17:11:51 +0000 Message-Id: <69ecf5d7.1874b.288e761a@gitrepo.freebsd.org> The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=c28508198f3b6ad6ed8942bfdd59ffd0731551e5 commit c28508198f3b6ad6ed8942bfdd59ffd0731551e5 Author: Dag-Erling Smørgrav AuthorDate: 2026-04-22 08:19:39 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-04-25 17:11:25 +0000 printenv: Clean up * Error out if more than one argument is given. * Check for stdio errors. * Clean up the code. * Clean up and expand the tests. MFC after: 1 week Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D56506 (cherry picked from commit abdf2a711cabebc107a04fd286e441e2030827f0) --- usr.bin/printenv/printenv.c | 52 +++++++++++++----------- usr.bin/printenv/tests/printenv_test.sh | 70 ++++++++++++++++++++++++--------- 2 files changed, 82 insertions(+), 40 deletions(-) diff --git a/usr.bin/printenv/printenv.c b/usr.bin/printenv/printenv.c index 43dbdb0c1378..ba221fe70539 100644 --- a/usr.bin/printenv/printenv.c +++ b/usr.bin/printenv/printenv.c @@ -38,9 +38,15 @@ #include #include -void usage(void); extern char **environ; +static void +usage(void) +{ + (void)fprintf(stderr, "usage: printenv [name]\n"); + exit(EXIT_FAILURE); +} + /* * printenv * @@ -52,40 +58,42 @@ main(int argc, char *argv[]) { char *cp, **ep; size_t len; - int ch; + int opt; if (caph_limit_stdio() < 0 || caph_enter() < 0) err(1, "capsicum"); - while ((ch = getopt(argc, argv, "")) != -1) - switch(ch) { - case '?': + while ((opt = getopt(argc, argv, "")) != -1) { + switch (opt) { default: usage(); } + } argc -= optind; argv += optind; + if (argc > 1) + usage(); if (argc == 0) { for (ep = environ; *ep; ep++) (void)printf("%s\n", *ep); - exit(0); - } - len = strlen(*argv); - for (ep = environ; *ep; ep++) - if (!memcmp(*ep, *argv, len)) { - cp = *ep + len; - if (*cp == '=') { - (void)printf("%s\n", cp + 1); - exit(0); + } else { + len = strlen(*argv); + for (ep = environ; *ep != NULL; ep++) { + if (memcmp(*ep, *argv, len) == 0) { + cp = *ep + len; + if (*cp == '=') { + (void)printf("%s\n", cp + 1); + break; + } } } - exit(1); -} - -void -usage(void) -{ - (void)fprintf(stderr, "usage: printenv [name]\n"); - exit(1); + if (*ep == NULL) { + /* *argv not found */ + exit(EXIT_FAILURE); + } + } + if (fflush(stdout) != 0) + err(EXIT_FAILURE, "stdout"); + exit(EXIT_SUCCESS); } diff --git a/usr.bin/printenv/tests/printenv_test.sh b/usr.bin/printenv/tests/printenv_test.sh index 754ad75d3b5b..83535a555b17 100644 --- a/usr.bin/printenv/tests/printenv_test.sh +++ b/usr.bin/printenv/tests/printenv_test.sh @@ -1,6 +1,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # +# Copyright (c) 2026 Dag-Erling Smørgrav # Copyright (c) 2023 The FreeBSD Foundation # # This software was developed by Yan-Hao Wang @@ -28,37 +29,70 @@ # SUCH DAMAGE # -atf_test_case base -base_head() +atf_test_case basic +basic_head() { - atf_set "descr" "Check that all reported variables exist with the reported values." + atf_set "descr" "Check that all reported variables " \ + "exist with the reported values." } -base_body() +basic_body() { - printenv | while IFS= read -r env; do - env_name=${env%%=*} - env_value=${env#*=} - expected_value=$(eval echo "\$$env_name") - atf_check_equal "${env_value}" "${expected_value}" - done + atf_check -o save:out printenv + while IFS= read -r env; do + env_name=${env%%=*} + env_value=${env#*=} + atf_check -o inline:"${env_value}" -x \ + printf "%s" "\"\$${env_name}\"" + done stderr + echo $? >result + ) | true + atf_check -o inline:"1\n" cat result + atf_check -o match:"stdout" cat stderr } atf_init_test_cases() { - atf_add_test_case base - atf_add_test_case add_delete_env + atf_add_test_case basic + atf_add_test_case add_delete_env + atf_add_test_case multi + atf_add_test_case stdout }