From nobody Wed Apr 22 08:19:49 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 4g0sb94r5yz6bk9T for ; Wed, 22 Apr 2026 08:19:49 +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 4g0sb92fGqz3cyt for ; Wed, 22 Apr 2026 08:19:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776845989; 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=zifnHTvt5u1+/t9UlflPG/N247Jv8ryemJzG5cnv1Zk=; b=cyGp98ABjWJ1KYuJRByBKlgaupSyYWM0e8+nC4vtQFSqWoT8upZVURh5IPuHqN9M6ZLITO F9MgnEnDHujqfedOpqMRuCXH3MN689E+UV78eexCyVSSW0NIDCqeTxDDcPj4s8xyJjJZkJ Nl92CbLoG+q/JwJdOz0Sp39aNOZ3vGNz58x5WBUH/Y7ZuGoN8wo+msiCDAn+tJVREZZi8V icO1qx6gp3s7tgVjN3OrvEn+HdMD66Obirlj7ExY8Ag6xzkOpU0/RD9b5Cm3and7q+cGvL 08kYChjn9DSb78M9vSLGZUr8pfrDHPY12vC1sOVBHBIs3JbDRrVlirLt0jMrJw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776845989; a=rsa-sha256; cv=none; b=TVaYki3X+T9iMvwPXURx993bC4iOQF23MLCO5J5nEtD8nlqMIj9hiTOBc0r6XLG+v9gcC4 HPoXeZz3Q+wBupN0MYClzkDryzbtxkpLT6K9uoJCYR4DUYE4Z2HuZKW19igIO5jwN+lbtk /aZ0+2N0MHde184bdJV7RTquyPH5an2M+XDrtS5n7KCHZ2QyNzqjZJhCUforXjbo7l97K0 u270QiMvSP/uHo498KMi014042ZpWcw58P6XK4xUprmzOcW1temGTdLxgHxICHu3IVzP4p ZIaCQn5z+zb0Wp00YV7b4bc4u9LZ+YX5dfD1ZDIZOa6v/vjtYPEuQk/mK3zp2A== 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=1776845989; 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=zifnHTvt5u1+/t9UlflPG/N247Jv8ryemJzG5cnv1Zk=; b=rBua01KDLbIVwYbOn/Y8b1CVM3qMdZUnnvYzDtwVfvRsaTc7+shV+qW56XHq4BClbxIns1 6BlaA66gWEOX+jsnL3yqU6xhMBhjoxb6Nn3Cebmx2Vc+zj9eODDwo5mWqFqG406JtUqs03 8LnOxSyxmYKmBkQpGSUBPK4r6X7VEM/+KC36pOr+Cxxp/b8e82Ee2jgYDs+Fiaoii7f8D0 zf8msncTHvDS6HF4rRA2YAPeds34LhKNYmrE5ZYcu3XyH3qhpq06/4mWbpCVKJRDLipu52 4YMRVm9qXDG/iMARafYqS6SUFKk+DOktGPuyeSnT6qAVWwRSMkF1SWCBYF3BQQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g0sb92CMlz6bs for ; Wed, 22 Apr 2026 08:19:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25a49 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Apr 2026 08:19:49 +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: abdf2a711cab - main - printenv: Clean up 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 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: abdf2a711cabebc107a04fd286e441e2030827f0 Auto-Submitted: auto-generated Date: Wed, 22 Apr 2026 08:19:49 +0000 Message-Id: <69e884a5.25a49.26f2d7e2@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=abdf2a711cabebc107a04fd286e441e2030827f0 commit abdf2a711cabebc107a04fd286e441e2030827f0 Author: Dag-Erling Smørgrav AuthorDate: 2026-04-22 08:19:39 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-04-22 08:19:39 +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 --- 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 }