From nobody Mon Jul 7 19:28:46 2025 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 4bbZ6R3RGHz611gm; Mon, 07 Jul 2025 19:28:47 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bbZ6R15RZz3ph5; Mon, 07 Jul 2025 19:28:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751916527; 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=U95Z+LJjRtY78ixdlhb0ZMhT81M/0hFUrHQPVJ0RlsM=; b=bZUuZpxF0h88c2qDe91iVk+kPYbvL6+zeT+pehKFxVPOu7hSK8AL+3GIq/VO7xi5o+hfxP qB/7/eeFuD2mObqd3kE0Do4gpIC4pYa3oNlXxF6SAj3MgR+bozcBLViLlDApSaRukfvHIV i6qNK1ApIgXN+sn4MPCZfGi5e3kArtRhjxPgBD6speF6wb1WSLWA8r6kABQ9UEalquZyZM 0POTj2yXXao03rfayaz5xbUOmUNw9cX1Wi0RjmKLhOEcCA/DnD1Ww6zlqNy9Z9L0h1kE/E 48xk3yWT+MjFrjuTI+velpoPYhzYGUxwfQkuk0R3DYT2vyo6WW1WXHnHgvOiuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751916527; 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=U95Z+LJjRtY78ixdlhb0ZMhT81M/0hFUrHQPVJ0RlsM=; b=mbeJB2hu/4eHXZAOH4FUKpfn7OMC6oB038xoN7WgCxYI1P80Hg4cQbIBVlrfVo217xpsDQ 23cTmBiDg3p34KTXgJLWU3vl2VEYyu9DzEm48WB0rkS3ekk0JZz6ZOX9WFp60gWskn90qp eZIMqHOnWbfqCLHK8NOgtwh57mttPaZ0KJ62Dn/o92WuXkjdc2ZQ1y84JtFRqmKmMJEatv 8GWFuxlxZ8FMNnkKwasjFhGz9LKXyxzij13N4Z28/ni6RX7v1tbQayHCLNtIWewGIzPLca 0sM5iHv8gH6w7M41YLqCj5PZvmsf8WDhbQO793W1yZLHAackJq98tIgqXRErSw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751916527; a=rsa-sha256; cv=none; b=edtyWdaMh55zrpimhJR8U7+3q2X1V/tkcwaURYkvuS1blFaZBFYjrQ4RWwiBK4O8w35ana G5x96WmllaU8u60dvmUB7ZLTHqOmVuM3/asWQ/MFXHHKDwRkRntJ/bd/EhYj8CnitLjiey QM7AAA2jESonYFpH4/8qrwlL/KPz4CjASI9DNpQxunaeSqpfYOJCEoPFMzOpeC+Pqs+/st lt7NoMX8QWCjPhl9/V2+1ZlFAOK2ofkDgATHYplVofWFfQ55kt0/mlIjjMpSiBHGMfMNeS oLCyLxKy5n74mN3aFSFjY3nmdgaOpt10+1GBDbDQGek4GASA5wJFUH5ItKd3aA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bbZ6R0dtjz140T; Mon, 07 Jul 2025 19:28:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 567JSkDQ012642; Mon, 7 Jul 2025 19:28:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 567JSk8Y012639; Mon, 7 Jul 2025 19:28:46 GMT (envelope-from git) Date: Mon, 7 Jul 2025 19:28:46 GMT Message-Id: <202507071928.567JSk8Y012639@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 01a679715f68 - main - err(3): print extended error if available 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 01a679715f68d5e32efecafc1f158eecec3f781b Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=01a679715f68d5e32efecafc1f158eecec3f781b commit 01a679715f68d5e32efecafc1f158eecec3f781b Author: Konstantin Belousov AuthorDate: 2025-06-16 21:26:22 +0000 Commit: Konstantin Belousov CommitDate: 2025-07-07 18:44:22 +0000 err(3): print extended error if available Reviewed by: asomers, brooks Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D51141 --- lib/libc/gen/err.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/lib/libc/gen/err.c b/lib/libc/gen/err.c index 24ea242560b8..cdce20af5a91 100644 --- a/lib/libc/gen/err.c +++ b/lib/libc/gen/err.c @@ -30,9 +30,12 @@ */ #include "namespace.h" +#include #include #include +#include #include +#include #include #include #include @@ -43,6 +46,11 @@ static FILE *err_file; /* file to use for error output */ static void (*err_exit)(int); +static void verrci(bool doexterr, int eval, int code, const char *fmt, + va_list ap) __printf0like(4, 0) __dead2; +static void vwarnci(bool doexterr, int code, const char *fmt, va_list ap) + __printf0like(3, 0); + /* * This is declared to take a `void *' so that the caller is not required * to include first. However, it is really a `FILE *', and the @@ -70,14 +78,14 @@ _err(int eval, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - verrc(eval, errno, fmt, ap); + verrci(true, eval, errno, fmt, ap); va_end(ap); } void verr(int eval, const char *fmt, va_list ap) { - verrc(eval, errno, fmt, ap); + verrci(true, eval, errno, fmt, ap); } void @@ -85,13 +93,24 @@ errc(int eval, int code, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - verrc(eval, code, fmt, ap); + verrci(false, eval, code, fmt, ap); va_end(ap); } void verrc(int eval, int code, const char *fmt, va_list ap) { + verrci(false, eval, code, fmt, ap); +} + +static void +vexterr(bool doexterr, int code, const char *fmt, va_list ap) +{ + char exterr[UEXTERROR_MAXLEN]; /* libc knows the buffer size */ + int extstatus; + + if (doexterr) + extstatus = uexterr_gettext(exterr, sizeof(exterr)); if (err_file == NULL) err_set_file(NULL); fprintf(err_file, "%s: ", _getprogname()); @@ -99,7 +118,16 @@ verrc(int eval, int code, const char *fmt, va_list ap) vfprintf(err_file, fmt, ap); fprintf(err_file, ": "); } - fprintf(err_file, "%s\n", strerror(code)); + fprintf(err_file, "%s", strerror(code)); + if (doexterr && extstatus == 0) + fprintf(err_file, " (extended error %s)", exterr); + fprintf(err_file, "\n"); +} + +static void +verrci(bool doexterr, int eval, int code, const char *fmt, va_list ap) +{ + vexterr(doexterr, code, fmt, ap); if (err_exit) err_exit(eval); exit(eval); @@ -156,18 +184,17 @@ warnc(int code, const char *fmt, ...) void vwarnc(int code, const char *fmt, va_list ap) +{ + vwarnci(false, code, fmt, ap); +} + +static void +vwarnci(bool doexterr, int code, const char *fmt, va_list ap) { int saved_errno; saved_errno = errno; - if (err_file == NULL) - err_set_file(NULL); - fprintf(err_file, "%s: ", _getprogname()); - if (fmt != NULL) { - vfprintf(err_file, fmt, ap); - fprintf(err_file, ": "); - } - fprintf(err_file, "%s\n", strerror(code)); + vexterr(doexterr, code, fmt, ap); errno = saved_errno; }