diff options
-rw-r--r-- | ChangeLog | 28 | ||||
-rw-r--r-- | argp/argp-help.c | 40 | ||||
-rw-r--r-- | include/stdio.h | 3 | ||||
-rw-r--r-- | misc/err.c | 23 | ||||
-rw-r--r-- | misc/error.c | 45 | ||||
-rw-r--r-- | stdio-common/fxprintf.c | 16 |
6 files changed, 111 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog index 326201af9b..9b0bc78dbd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +2019-02-21 Gabriel F. T. Gomes <gabriel@inconstante.eti.br> + + * argp/argp-help.c (__argp_error_internal): New function, + renamed from __argp_error, but that takes a 'mode_flags' + parameter to control the format of long double parameters. + (__argp_error): Converted into a call __argp_error_internal. + (__argp_failure_internal): New function, renamed from + __argp_failure, but that takes a 'mode_flags' parameter. + (__argp_failure): Converted into a call __argp_failure_internal. + * misc/err.c (__vwarnx_internal): New function, renamed from + vwarnx, but that takes a 'mode_flags' parameter. + (vwarnx): Converted into a call to __vwarnx_internal. + (__vwarn_internal): New function, renamed from vwarn, but that + takes a 'mode_flags' parameter. + (vwarn): Converted into a call to __vwarn_internal. + * misc/error.c (error_tail): Add 'mode_flags' parameter. Update + call to __vfxprintf with 'mode_flags'. + (__error_internal): New function, renamed from error, but that + takes a 'mode_flags' parameter. + (error): Converted into a call to __error_internal. + (__error_at_line_internal): New function, renamed from + error_at_line, but that takes a 'mode_flags' parameter. + (error_at_line): Converted into a call to + __error_at_line_internal. + * include/stdio.h (__vfxprintf): Add mode_flags parameter. + * stdio-common/fxprintf.c (locked_vfxprintf, __vfxprintf): + Likewise. + 2019-02-20 Martin Liska <mliska@suse.cz> * math/Makefile: Install math-vector-fortran.h. diff --git a/argp/argp-help.c b/argp/argp-help.c index 52ec2316fa..3b1727c4aa 100644 --- a/argp/argp-help.c +++ b/argp/argp-help.c @@ -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 diff --git a/include/stdio.h b/include/stdio.h index 65ccabbb05..7d1877ea5e 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -134,7 +134,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 diff --git a/misc/err.c b/misc/err.c index 7c8f539554..988ec8f3ee 100644 --- a/misc/err.c +++ b/misc/err.c @@ -38,19 +38,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 +59,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 +70,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, ...) diff --git a/misc/error.c b/misc/error.c index 556261d871..e090d1bbc1 100644 --- a/misc/error.c +++ b/misc/error.c @@ -200,10 +200,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 +233,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 +259,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 +268,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 +337,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 +347,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 diff --git a/stdio-common/fxprintf.c b/stdio-common/fxprintf.c index 9e71499d44..9866c8b3be 100644 --- a/stdio-common/fxprintf.c +++ b/stdio-common/fxprintf.c @@ -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); |