From d2ed4c82937a2c3f12f541e8c502e66864794c71 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 25 Dec 2024 19:13:53 +0100 Subject: [PATCH] xprintf, xprintf-posix, xprintf-gnu: Use *zprintf. * lib/xprintf.h (xprintf, xvprintf, xfprintf, xvfprintf): Change return type to off64_t. Move documentation from xprintf.c to here. Mention EOVERFLOW as another possible error unrelated to file I/O. * lib/xprintf.c (xprintf): Change return type to off64_t. (xvprintf): Likewise. Use vzprintf. (xfprintf): Change return type to off64_t. (xvfprintf): Likewise. Use vfzprintf. * modules/xprintf (Description): Mention also fprintf. Mention EOVERFLOW as another possible error unrelated to file I/O. (Depends-on): Add vzprintf, vfzprintf. * modules/xprintf-posix (Description): Mention also fprintf. Mention EOVERFLOW as another possible error unrelated to file I/O. (Depends-on): Add vzprintf-posix, vfzprintf-posix. Remove vprintf-posix, vfprintf-posix. * modules/xprintf-gnu (Description): Mention also fprintf. Mention EOVERFLOW as another possible error unrelated to file I/O. (Depends-on): Add vzprintf-gnu, vfzprintf-gnu. Remove vprintf-gnu, vfprintf-gnu. * tests/test-xprintf-posix.c (RETTYPE): Change to off64_t. * tests/test-xfprintf-posix.c (RETTYPE): Likewise. * NEWS: Document the change. --- ChangeLog | 25 +++++++++++++++++++++++++ NEWS | 3 +++ lib/xprintf.c | 28 ++++++++++------------------ lib/xprintf.h | 21 +++++++++++++++------ modules/xprintf | 5 ++++- modules/xprintf-gnu | 9 +++++---- modules/xprintf-posix | 9 +++++---- tests/test-xfprintf-posix.c | 2 +- tests/test-xprintf-posix.c | 2 +- 9 files changed, 69 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index e609ecf440..5c1a2240e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2024-12-25 Bruno Haible + + xprintf, xprintf-posix, xprintf-gnu: Use *zprintf. + * lib/xprintf.h (xprintf, xvprintf, xfprintf, xvfprintf): Change return + type to off64_t. Move documentation from xprintf.c to here. Mention + EOVERFLOW as another possible error unrelated to file I/O. + * lib/xprintf.c (xprintf): Change return type to off64_t. + (xvprintf): Likewise. Use vzprintf. + (xfprintf): Change return type to off64_t. + (xvfprintf): Likewise. Use vfzprintf. + * modules/xprintf (Description): Mention also fprintf. Mention EOVERFLOW + as another possible error unrelated to file I/O. + (Depends-on): Add vzprintf, vfzprintf. + * modules/xprintf-posix (Description): Mention also fprintf. Mention + EOVERFLOW as another possible error unrelated to file I/O. + (Depends-on): Add vzprintf-posix, vfzprintf-posix. Remove vprintf-posix, + vfprintf-posix. + * modules/xprintf-gnu (Description): Mention also fprintf. Mention + EOVERFLOW as another possible error unrelated to file I/O. + (Depends-on): Add vzprintf-gnu, vfzprintf-gnu. Remove vprintf-gnu, + vfprintf-gnu. + * tests/test-xprintf-posix.c (RETTYPE): Change to off64_t. + * tests/test-xfprintf-posix.c (RETTYPE): Likewise. + * NEWS: Document the change. + 2024-12-25 Bruno Haible stdlib: Improve change from 2024-12-23. diff --git a/NEWS b/NEWS index 9e08bd1048..e64d1583f8 100644 --- a/NEWS +++ b/NEWS @@ -74,6 +74,9 @@ User visible incompatible changes Date Modules Changes +2024-12-25 xprintf The functions x[v][f]printf now return an 'off64_t' + instead of an 'int'. + 2024-11-05 eealloc This module is deprecated. Use malloc-gnu or realloc-posix instead. diff --git a/lib/xprintf.c b/lib/xprintf.c index 732bbea407..5d01874b63 100644 --- a/lib/xprintf.c +++ b/lib/xprintf.c @@ -14,6 +14,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* written by Jim Meyering */ + #include #include "xprintf.h" @@ -26,15 +28,11 @@ #define _(msgid) dgettext ("gnulib", msgid) -/* written by Jim Meyering */ - -/* Just like printf, but call error if it fails without setting the - stream's error indicator. */ -int +off64_t xprintf (char const *restrict format, ...) { va_list args; - int retval; + off64_t retval; va_start (args, format); retval = xvprintf (format, args); va_end (args); @@ -42,25 +40,21 @@ xprintf (char const *restrict format, ...) return retval; } -/* Just like vprintf, but call error if it fails without setting the - stream's error indicator. */ -int +off64_t xvprintf (char const *restrict format, va_list args) { - int retval = vprintf (format, args); + off64_t retval = vzprintf (format, args); if (retval < 0 && ! ferror (stdout)) error (exit_failure, errno, _("cannot perform formatted output")); return retval; } -/* Just like fprintf, but call error if it fails without setting the - stream's error indicator. */ -int +off64_t xfprintf (FILE *restrict stream, char const *restrict format, ...) { va_list args; - int retval; + off64_t retval; va_start (args, format); retval = xvfprintf (stream, format, args); va_end (args); @@ -68,12 +62,10 @@ xfprintf (FILE *restrict stream, char const *restrict format, ...) return retval; } -/* Just like vfprintf, but call error if it fails without setting the - stream's error indicator. */ -int +off64_t xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) { - int retval = vfprintf (stream, format, args); + off64_t retval = vfzprintf (stream, format, args); if (retval < 0 && ! ferror (stream)) error (exit_failure, errno, _("cannot perform formatted output")); diff --git a/lib/xprintf.h b/lib/xprintf.h index 202dbd2022..c30b5080a0 100644 --- a/lib/xprintf.h +++ b/lib/xprintf.h @@ -1,4 +1,4 @@ -/* printf wrappers that fail immediately for non-file-related errors +/* printf and fprintf wrappers that fail immediately for non-file-related errors Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -30,7 +30,9 @@ extern "C" { #endif -extern int xprintf (char const *restrict format, ...) +/* Like zprintf, but call error if it fails without setting stdout's + error indicator, i.e. upon ENOMEM, EOVERFLOW, or EILSEQ errors. */ +extern off64_t xprintf (char const *restrict format, ...) #if GNULIB_VPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) #else @@ -38,7 +40,9 @@ extern int xprintf (char const *restrict format, ...) #endif ; -extern int xvprintf (char const *restrict format, va_list args) +/* Like vzprintf, but call error if it fails without setting stdout's + error indicator, i.e. upon ENOMEM, EOVERFLOW, or EILSEQ errors. */ +extern off64_t xvprintf (char const *restrict format, va_list args) #if GNULIB_VPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) #else @@ -46,7 +50,10 @@ extern int xvprintf (char const *restrict format, va_list args) #endif ; -extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) +/* Like fzprintf, but call error if it fails without setting the stream's + error indicator, i.e. upon ENOMEM, EOVERFLOW, or EILSEQ errors. */ +extern off64_t xfprintf (FILE *restrict stream, char const *restrict format, + ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else @@ -54,8 +61,10 @@ extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) #endif ; -extern int xvfprintf (FILE *restrict stream, char const *restrict format, - va_list args) +/* Like vfzprintf, but call error if it fails without setting the stream's + error indicator, i.e. upon ENOMEM, EOVERFLOW, or EILSEQ errors. */ +extern off64_t xvfprintf (FILE *restrict stream, char const *restrict format, + va_list args) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)) #else diff --git a/modules/xprintf b/modules/xprintf index 79c82d9168..dfe8cbe114 100644 --- a/modules/xprintf +++ b/modules/xprintf @@ -1,5 +1,6 @@ Description: -a wrapper around printf that calls error upon ENOMEM or EILSEQ errors +Wrappers around printf and fprintf that call error +upon ENOMEM, EOVERFLOW, or EILSEQ errors. Files: lib/xprintf.h @@ -12,6 +13,8 @@ exitfail gettext-h gnulib-i18n stdarg +vzprintf +vfzprintf configure.ac: m4_ifdef([AM_XGETTEXT_OPTION], diff --git a/modules/xprintf-gnu b/modules/xprintf-gnu index c0fd3f062b..704a5fde6d 100644 --- a/modules/xprintf-gnu +++ b/modules/xprintf-gnu @@ -1,6 +1,7 @@ Description: -A wrapper around printf with POSIX and GNU compatible format string -interpretation, that calls error upon ENOMEM or EILSEQ errors. +Wrappers around printf and fprintf +with POSIX and GNU compatible format string interpretation, +that calls error upon ENOMEM, EOVERFLOW, or EILSEQ errors. Comment: This module should not be used as a dependency from a test module, @@ -12,8 +13,8 @@ Files: Depends-on: xprintf -vprintf-gnu -vfprintf-gnu +vzprintf-gnu +vfzprintf-gnu configure.ac: diff --git a/modules/xprintf-posix b/modules/xprintf-posix index 5335d5c9c0..98e7c6df20 100644 --- a/modules/xprintf-posix +++ b/modules/xprintf-posix @@ -1,6 +1,7 @@ Description: -A wrapper around printf with POSIX compatible format string interpretation, -that calls error upon ENOMEM or EILSEQ errors. +Wrappers around printf and fprintf +with POSIX compatible format string interpretation, +that calls error upon ENOMEM, EOVERFLOW, or EILSEQ errors. Comment: This module should not be used as a dependency from a test module, @@ -12,8 +13,8 @@ Files: Depends-on: xprintf -vprintf-posix -vfprintf-posix +vzprintf-posix +vfzprintf-posix configure.ac: diff --git a/tests/test-xfprintf-posix.c b/tests/test-xfprintf-posix.c index 18a3a0dfd9..373d95b829 100644 --- a/tests/test-xfprintf-posix.c +++ b/tests/test-xfprintf-posix.c @@ -26,7 +26,7 @@ #include "macros.h" -#define RETTYPE int +#define RETTYPE off64_t #include "test-fprintf-posix.h" int diff --git a/tests/test-xprintf-posix.c b/tests/test-xprintf-posix.c index c9e79c0e26..38e5c2c9d6 100644 --- a/tests/test-xprintf-posix.c +++ b/tests/test-xprintf-posix.c @@ -26,7 +26,7 @@ #include "macros.h" -#define RETTYPE int +#define RETTYPE off64_t #include "test-printf-posix.h" int -- 2.39.5