From patchwork Fri Oct 4 02:19:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Collin Funk X-Patchwork-Id: 1992576 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=bFArY9iP; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XKXLk3G8jz1xsn for ; Fri, 4 Oct 2024 12:19:58 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E556384642B for ; Fri, 4 Oct 2024 02:19:56 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by sourceware.org (Postfix) with ESMTPS id 8FF55385DDDA for ; Fri, 4 Oct 2024 02:19:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8FF55385DDDA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8FF55385DDDA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728008380; cv=none; b=jQ0m2W/i0gyXCq7IlRjHHxr39xn7l52my1PBhh17x8PvWqGoiGZtqGmowX8YNGbqoGRW8683ksDt5TKx5H6H9jRX+fXXnXX2gs1zMj/DTJX5YWapJLvoqgEfgAqFP2DiUscQ+y3TBq/rB483xrLIPRd2CTrNSYJ7yleEZSrCFRI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728008380; c=relaxed/simple; bh=VqZXX8Tpkj3nLfSgcjk5Fcs2GmqVe8rKCkYjAugfbm4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=PJhPyM90f6gon+p1HtZFuXmjWutsIKGwLMJ/PEKszrK9oZk8O+UeeZ1FpCa6iuaFCbIL7VvlRyIQiByzCp7vYq2iTbhv10qqMKy7fdcl/OHNlrKAkvuPvPG8SkMZNvLSZ1/oEn37M+xTqln3xcje7FHKO6bZPKs1fyXQlnqRK98= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-208cf673b8dso16611225ad.3 for ; Thu, 03 Oct 2024 19:19:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728008375; x=1728613175; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RigeRmLhNJHSBi8JX9a+Ise1ARs1FdevvuH6QMdaJ1s=; b=bFArY9iPb/9ngOCPIlxFGvH2yFjKaT1GAQGfow7F6Y+m/buzMcOG7O+feqj7OLqOx0 1/0xlCexD2HtpKx+HQgT4iXxmD44DYCY+76UOu8XzBRLuCFFGnl+9o9LucWcXdq8SESJ BOpXns+sMM/NatkmS+rNQbLr0S7rGIPpo3DLWb7UJg0/vI3279GvNc8JmW2kYaMaH+NY 5dQYvokj7kM3UWtL/1R388HmLXGaAAL+QsaPbpdYJtLSy4oLlrOCF3EzVjft+d6HliwT vBuX/XI4TdkrEVO14EDQ29LJuYxg8jCzj42ua6lICy5ZV2jiHQMqeyrw2FieV0rLuGlX SL3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728008375; x=1728613175; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RigeRmLhNJHSBi8JX9a+Ise1ARs1FdevvuH6QMdaJ1s=; b=EbBgRwELtapIWwJxpC4Qtsshbw3mFbzi8geT/p9sV1QNQlRjubYICEFG7aLXDK5Mbr ZHqkozLvDc7wnWyNyvAJyaoMpgKtkS0QogEslkht/RKEm5uW7bsFp34rWeI+FXyikNd4 eS4kLludnOfDF/cXEuZDekW7Uh+geGUFP1gb75CH9kRfSMzOvzEusg8pwIWO06y8Ox+k 1Sroh4uX++FF1LV2aAH+W5Ep+l5pK8o1uHusGvx1lgeELWzQHXuO/Kuuic+n9cJFUxjN ClYdkEGQ7xc9IFK4n1r9rMlW142ipFnMCzUrbJYtozzCIHHClo8UKnLpKkMfe+LsMCXa ASmQ== X-Gm-Message-State: AOJu0Yy1NVIX6Fm2PlDCw29kpygFh6SrcLXjaRT3rixoSUoskTM4cgnD eeWCytPicC+kB5AFzQkSgzHKpNn6xoSZQbS4K/xV30r4q+7k7Cugk2WCjw== X-Google-Smtp-Source: AGHT+IE3CgD91alcspDLwkl6waWi6hLvdNXu7W7/qFRJa9rXYwk5wVGYDH/DyT7GjHv0SAticIrVOQ== X-Received: by 2002:a17:903:11c3:b0:20b:38fe:60d7 with SMTP id d9443c01a7336-20bfdfd4eefmr15477835ad.22.1728008375465; Thu, 03 Oct 2024 19:19:35 -0700 (PDT) Received: from fedora.. ([138.199.43.96]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20beefb3b5fsm15136275ad.237.2024.10.03.19.19.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Oct 2024 19:19:34 -0700 (PDT) From: Collin Funk To: libc-alpha@sourceware.org Cc: sam@gentoo.org, Collin Funk Subject: [PATCH v2] error: Don't call va_end twice [BZ #32233]. Date: Thu, 3 Oct 2024 19:19:09 -0700 Message-ID: <20241004021920.12796-1-collin.funk1@gmail.com> X-Mailer: git-send-email 2.46.2 In-Reply-To: <87zfnl68e4.fsf@gentoo.org> References: <87zfnl68e4.fsf@gentoo.org> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org Hi Sam, Makes sense, was a bit lazy of me. This should be better. -- 8< -- Sync to Gnulib commit ba9136b7646ef9e01ffad3ddcf232002354531d0 * misc/error.c (error_tail): Remove va_end call. (__error_internal): Use the '%u' conversion specifier instead of '%d' for 'line_number' which is an unsigned int. The following changes are only applicable to Gnulib: * misc/error.c: Use #include instead of #include "error.h" to silence Clang's -Winclude-next-absolute-path. (__error_internal, __error_at_line_internal, error_tail): Define to Gnulib symbols. [_WIN32 && !__CYGWIN__]: Include io.h for Windows function declarations. (strerror_r): Use a C23 compatible declaration. (program_name): Define to getprogname. (verror, verror_at_line) [GNULIB_defined_verror]: Define symbols. Signed-off-by: Collin Funk --- misc/error.c | 89 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/misc/error.c b/misc/error.c index e5d5588434..6816805326 100644 --- a/misc/error.c +++ b/misc/error.c @@ -20,9 +20,16 @@ #if !_LIBC # include +# define _GL_NO_INLINE_ERROR +# define __error_internal(status, err, fmt, args, flags) \ + verror (status, err, fmt, args) +# define __error_at_line_internal(status, err, file, line, fmt, args, flags) \ + verror_at_line (status, err, file, line, fmt, args) +# define error_tail(status, err, fmt, args, flags) \ + error_tail (status, err, fmt, args) #endif -#include "error.h" +#include #include #include @@ -41,7 +48,7 @@ # include # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 -# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) +# define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) #endif @@ -74,9 +81,9 @@ unsigned int error_message_count; extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, - unsigned int line_number, const char *message, - ...) - __attribute__ ((__format__ (__printf__, 5, 6)));; + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line @@ -92,43 +99,52 @@ extern void __error_at_line (int status, int errnum, const char *file_name, # include # include -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ -# include "msvc-nothrow.h" +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include +# endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl -# if !HAVE_DECL_STRERROR_R +# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P -char *strerror_r (); +char *strerror_r (int errnum, char *buf, size_t buflen); # else -int strerror_r (); +int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif -/* The calling program should define program_name and set it to the - name of the executing program. */ -extern char *program_name; +# define program_name getprogname () -# if HAVE_STRERROR_R || defined strerror_r +# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r -# endif /* HAVE_STRERROR_R || defined strerror_r */ -#endif /* not _LIBC */ +# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ + +# if GNULIB_defined_verror +# undef verror +# endif +# if GNULIB_defined_verror_at_line +# undef verror_at_line +# endif +#endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support @@ -173,9 +189,9 @@ print_errno_message (int errnum) { char const *s; -#if defined HAVE_STRERROR_R || _LIBC +#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; -# if _LIBC || STRERROR_R_CHAR_P +# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) @@ -199,9 +215,9 @@ print_errno_message (int errnum) #endif } -static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) +static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args, - unsigned int mode_flags) + unsigned int mode_flags) { #if _LIBC int ret = __vfxprintf (stderr, message, args, mode_flags); @@ -212,7 +228,6 @@ error_tail (int status, int errnum, const char *message, va_list args, #else vfprintf (stderr, message, args); #endif - va_end (args); ++error_message_count; if (errnum) @@ -234,7 +249,7 @@ error_tail (int status, int errnum, const char *message, va_list args, Exit with status STATUS if it is nonzero. */ void __error_internal (int status, int errnum, const char *message, - va_list args, unsigned int mode_flags) + va_list args, unsigned int mode_flags) { #if defined _LIBC /* We do not want this call to be cut short by a thread @@ -281,8 +296,8 @@ int error_one_per_line; void __error_at_line_internal (int status, int errnum, const char *file_name, - unsigned int line_number, const char *message, - va_list args, unsigned int mode_flags) + unsigned int line_number, const char *message, + va_list args, unsigned int mode_flags) { if (error_one_per_line) { @@ -290,13 +305,13 @@ __error_at_line_internal (int status, int errnum, const char *file_name, static unsigned int old_line_number; if (old_line_number == line_number - && (file_name == old_file_name - || (old_file_name != NULL - && file_name != NULL - && strcmp (old_file_name, file_name) == 0))) + && (file_name == old_file_name + || (old_file_name != NULL + && file_name != NULL + && strcmp (old_file_name, file_name) == 0))) - /* Simply return and print nothing. */ - return; + /* Simply return and print nothing. */ + return; old_file_name = file_name; old_line_number = line_number; @@ -325,11 +340,11 @@ __error_at_line_internal (int status, int errnum, const char *file_name, } #if _LIBC - __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", - file_name, line_number); + __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); #else - fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", - file_name, line_number); + fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); #endif error_tail (status, errnum, message, args, mode_flags); @@ -342,12 +357,12 @@ __error_at_line_internal (int status, int errnum, const char *file_name, void error_at_line (int status, int errnum, const char *file_name, - unsigned int line_number, const char *message, ...) + unsigned int line_number, const char *message, ...) { va_list ap; va_start (ap, message); __error_at_line_internal (status, errnum, file_name, line_number, - message, ap, 0); + message, ap, 0); va_end (ap); }