+2024-07-29 Bruno Haible <bruno@clisp.org>
+
+ vasprintf, c-vasprintf: Remind users to consider the return value.
+ * lib/stdio.in.h (aszprintf, vaszprintf, asprintf, vasprintf): Mark with
+ _GL_ATTRIBUTE_NODISCARD.
+ * lib/c-vasprintf.h (c_aszprintf, c_vaszprintf, c_asprintf,
+ c_vasprintf): Likewise.
+
2024-07-29 Bruno Haible <bruno@clisp.org>
xstrtol, xstrtoll tests: Avoid test failure after 2024-07-25 change.
#ifndef _C_VASPRINTF_H
#define _C_VASPRINTF_H
-/* This file uses _GL_ATTRIBUTE_FORMAT. */
+/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_NODISCARD. */
#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
Formatting takes place in the C locale, that is, the decimal point
used in floating-point formatting directives is always '.'. */
+_GL_ATTRIBUTE_NODISCARD
ptrdiff_t c_aszprintf (char **resultp, const char *format, ...)
_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3));
+_GL_ATTRIBUTE_NODISCARD
ptrdiff_t c_vaszprintf (char **resultp, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0));
Formatting takes place in the C locale, that is, the decimal point
used in floating-point formatting directives is always '.'. */
+_GL_ATTRIBUTE_NODISCARD
int c_asprintf (char **resultp, const char *format, ...)
_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3));
+_GL_ATTRIBUTE_NODISCARD
int c_vasprintf (char **resultp, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0));
#define _@GUARD_PREFIX@_STDIO_H
/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT,
- _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK,
- HAVE_RAW_DECL_*. */
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOTHROW,
+ GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */
#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
Failure code EOVERFLOW can only occur when a width > INT_MAX is used.
Therefore, if the format string is valid and does not use %ls/%lc
directives nor widths, the only possible failure code is ENOMEM. */
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_SYS (aszprintf, ptrdiff_t,
(char **result, const char *format, ...)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_SYS (aszprintf, ptrdiff_t,
(char **result, const char *format, ...));
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_SYS (vaszprintf, ptrdiff_t,
(char **result, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
# define asprintf rpl_asprintf
# endif
# define GNULIB_overrides_asprintf
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_RPL (asprintf, int,
(char **result, const char *format, ...)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
(char **result, const char *format, ...));
# else
# if !@HAVE_VASPRINTF@
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_SYS (asprintf, int,
(char **result, const char *format, ...)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
# define vasprintf rpl_vasprintf
# endif
# define GNULIB_overrides_vasprintf 1
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_RPL (vasprintf, int,
(char **result, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
(char **result, const char *format, va_list args));
# else
# if !@HAVE_VASPRINTF@
+_GL_ATTRIBUTE_NODISCARD
_GL_FUNCDECL_SYS (vasprintf, int,
(char **result, const char *format, va_list args)
_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)