@@ -1750,7 +1750,8 @@ weak_alias (__argp_state_help, argp_state_help)
by the program name and `:', to stderr, and followed by a `Try ... --help'
message, then exit (1). */
void
-__argp_error (const struct argp_state *state, const char *fmt, ...)
+__argp_error_internal (const struct argp_state *state, const char *fmt,
+ va_list ap, unsigned int mode_flags)
{
if (!state || !(state->flags & ARGP_NO_ERRS))
{
@@ -1758,18 +1759,14 @@ __argp_error (const struct argp_state *state, const char *fmt, ...)
if (stream)
{
- va_list ap;
-
#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
__flockfile (stream);
#endif
- va_start (ap, fmt);
-
#ifdef _LIBC
char *buf;
- if (__vasprintf_internal (&buf, fmt, ap, 0) < 0)
+ if (__vasprintf_internal (&buf, fmt, ap, mode_flags) < 0)
buf = NULL;
__fxprintf (stream, "%s: %s\n",
@@ -1789,14 +1786,20 @@ __argp_error (const struct argp_state *state, const char *fmt, ...)
__argp_state_help (state, stream, ARGP_HELP_STD_ERR);
- va_end (ap);
-
#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
__funlockfile (stream);
#endif
}
}
}
+void
+__argp_error (const struct argp_state *state, const char *fmt, ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ __argp_error_internal (state, fmt, ap, 0);
+ va_end (ap);
+}
#ifdef weak_alias
weak_alias (__argp_error, argp_error)
#endif
@@ -1810,8 +1813,9 @@ weak_alias (__argp_error, argp_error)
*parsing errors*, and the former is for other problems that occur during
parsing but don't reflect a (syntactic) problem with the input. */
void
-__argp_failure (const struct argp_state *state, int status, int errnum,
- const char *fmt, ...)
+__argp_failure_internal (const struct argp_state *state, int status,
+ int errnum, const char *fmt, va_list ap,
+ unsigned int mode_flags)
{
if (!state || !(state->flags & ARGP_NO_ERRS))
{
@@ -1833,13 +1837,10 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
if (fmt)
{
- va_list ap;
-
- va_start (ap, fmt);
#ifdef _LIBC
char *buf;
- if (__vasprintf_internal (&buf, fmt, ap, 0) < 0)
+ if (__vasprintf_internal (&buf, fmt, ap, mode_flags) < 0)
buf = NULL;
__fxprintf (stream, ": %s", buf);
@@ -1851,8 +1852,6 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
vfprintf (stream, fmt, ap);
#endif
-
- va_end (ap);
}
if (errnum)
@@ -1889,6 +1888,15 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
}
}
}
+void
+__argp_failure (const struct argp_state *state, int status, int errnum,
+ const char *fmt, ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ __argp_failure_internal (state, status, errnum, fmt, ap, 0);
+ va_end (ap);
+}
#ifdef weak_alias
weak_alias (__argp_failure, argp_failure)
#endif
@@ -124,7 +124,8 @@ extern int __fxprintf (FILE *__fp, const char *__fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden;
extern int __fxprintf_nocancel (FILE *__fp, const char *__fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden;
-int __vfxprintf (FILE *__fp, const char *__fmt, __gnuc_va_list)
+int __vfxprintf (FILE *__fp, const char *__fmt, __gnuc_va_list,
+ unsigned int)
attribute_hidden;
/* Read the next line from FP into BUFFER, of LENGTH bytes. LINE will
@@ -27,6 +27,10 @@
#define flockfile(s) _IO_flockfile (s)
#define funlockfile(s) _IO_funlockfile (s)
+#ifdef _LIBC
+# include <../libio/libioP.h>
+#endif
+
extern char *__progname;
#define VA(call) \
@@ -38,19 +42,20 @@ extern char *__progname;
}
void
-vwarnx (const char *format, __gnuc_va_list ap)
+__vwarnx_internal (const char *format, __gnuc_va_list ap,
+ unsigned int mode_flags)
{
flockfile (stderr);
__fxprintf (stderr, "%s: ", __progname);
if (format != NULL)
- __vfxprintf (stderr, format, ap);
+ __vfxprintf (stderr, format, ap, mode_flags);
__fxprintf (stderr, "\n");
funlockfile (stderr);
}
-libc_hidden_def (vwarnx)
void
-vwarn (const char *format, __gnuc_va_list ap)
+__vwarn_internal (const char *format, __gnuc_va_list ap,
+ unsigned int mode_flags)
{
int error = errno;
@@ -58,7 +63,7 @@ vwarn (const char *format, __gnuc_va_list ap)
if (format != NULL)
{
__fxprintf (stderr, "%s: ", __progname);
- __vfxprintf (stderr, format, ap);
+ __vfxprintf (stderr, format, ap, mode_flags);
__set_errno (error);
__fxprintf (stderr, ": %m\n");
}
@@ -69,8 +74,20 @@ vwarn (const char *format, __gnuc_va_list ap)
}
funlockfile (stderr);
}
+
+void
+vwarn (const char *format, __gnuc_va_list ap)
+{
+ __vwarn_internal (format, ap, 0);
+}
libc_hidden_def (vwarn)
+void
+vwarnx (const char *format, __gnuc_va_list ap)
+{
+ __vwarnx_internal (format, ap, 0);
+}
+libc_hidden_def (vwarnx)
void
warn (const char *format, ...)
@@ -39,6 +39,7 @@
# include <stdbool.h>
# include <stdint.h>
# include <wchar.h>
+# include <../libio/libioP.h>
# define mbsrtowcs __mbsrtowcs
# define USE_UNLOCKED_IO 0
# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b)
@@ -200,10 +201,11 @@ print_errno_message (int errnum)
}
static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))
-error_tail (int status, int errnum, const char *message, va_list args)
+error_tail (int status, int errnum, const char *message, va_list args,
+ unsigned int mode_flags)
{
#if _LIBC
- int ret = __vfxprintf (stderr, message, args);
+ int ret = __vfxprintf (stderr, message, args, mode_flags);
if (ret < 0 && errno == ENOMEM && _IO_fwide (stderr, 0) > 0)
/* Leave a trace in case the heap allocation of the message string
failed. */
@@ -232,10 +234,9 @@ error_tail (int status, int errnum, const char *message, va_list args)
If ERRNUM is nonzero, print its corresponding system error message.
Exit with status STATUS if it is nonzero. */
void
-error (int status, int errnum, const char *message, ...)
+__error_internal (int status, int errnum, const char *message,
+ va_list args, unsigned int mode_flags)
{
- va_list args;
-
#if defined _LIBC && defined __libc_ptf_call
/* We do not want this call to be cut short by a thread
cancellation. Therefore disable cancellation for now. */
@@ -259,9 +260,7 @@ error (int status, int errnum, const char *message, ...)
#endif
}
- va_start (args, message);
- error_tail (status, errnum, message, args);
- va_end (args);
+ error_tail (status, errnum, message, args, mode_flags);
#ifdef _LIBC
_IO_funlockfile (stderr);
@@ -270,17 +269,25 @@ error (int status, int errnum, const char *message, ...)
# endif
#endif
}
+
+void
+error (int status, int errnum, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ __error_internal (status, errnum, message, ap, 0);
+ va_end (ap);
+}
/* Sometimes we want to have at most one error per line. This
variable controls whether this mode is selected or not. */
int error_one_per_line;
void
-error_at_line (int status, int errnum, const char *file_name,
- unsigned int line_number, const char *message, ...)
+__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)
{
- va_list args;
-
if (error_one_per_line)
{
static const char *old_file_name;
@@ -331,9 +338,7 @@ error_at_line (int status, int errnum, const char *file_name,
file_name, line_number);
#endif
- va_start (args, message);
- error_tail (status, errnum, message, args);
- va_end (args);
+ error_tail (status, errnum, message, args, mode_flags);
#ifdef _LIBC
_IO_funlockfile (stderr);
@@ -343,6 +348,17 @@ error_at_line (int status, int errnum, const char *file_name,
#endif
}
+void
+error_at_line (int status, int errnum, const char *file_name,
+ 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);
+ va_end (ap);
+}
+
#ifdef _LIBC
/* Make the weak alias. */
# undef error
@@ -24,10 +24,11 @@
#include <libioP.h>
static int
-locked_vfxprintf (FILE *fp, const char *fmt, va_list ap)
+locked_vfxprintf (FILE *fp, const char *fmt, va_list ap,
+ unsigned int mode_flags)
{
if (_IO_fwide (fp, 0) <= 0)
- return __vfprintf_internal (fp, fmt, ap, 0);
+ return __vfprintf_internal (fp, fmt, ap, mode_flags);
/* We must convert the narrow format string to a wide one.
Each byte can produce at most one wide character. */
@@ -53,7 +54,7 @@ locked_vfxprintf (FILE *fp, const char *fmt, va_list ap)
res = __mbsrtowcs (wfmt, &fmt, len, &mbstate);
if (res != -1)
- res = __vfwprintf_internal (fp, wfmt, ap, 0);
+ res = __vfwprintf_internal (fp, wfmt, ap, mode_flags);
if (used_malloc)
free (wfmt);
@@ -62,12 +63,13 @@ locked_vfxprintf (FILE *fp, const char *fmt, va_list ap)
}
int
-__vfxprintf (FILE *fp, const char *fmt, va_list ap)
+__vfxprintf (FILE *fp, const char *fmt, va_list ap,
+ unsigned int mode_flags)
{
if (fp == NULL)
fp = stderr;
_IO_flockfile (fp);
- int res = locked_vfxprintf (fp, fmt, ap);
+ int res = locked_vfxprintf (fp, fmt, ap, mode_flags);
_IO_funlockfile (fp);
return res;
}
@@ -77,7 +79,7 @@ __fxprintf (FILE *fp, const char *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
- int res = __vfxprintf (fp, fmt, ap);
+ int res = __vfxprintf (fp, fmt, ap, 0);
va_end (ap);
return res;
}
@@ -94,7 +96,7 @@ __fxprintf_nocancel (FILE *fp, const char *fmt, ...)
int save_flags2 = fp->_flags2;
fp->_flags2 |= _IO_FLAGS2_NOTCANCEL;
- int res = locked_vfxprintf (fp, fmt, ap);
+ int res = locked_vfxprintf (fp, fmt, ap, 0);
fp->_flags2 = save_flags2;
_IO_funlockfile (fp);