diff options
Diffstat (limited to 'src/printf.c')
| -rw-r--r-- | src/printf.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/printf.c b/src/printf.c index 1c8a01bc4..063f07736 100644 --- a/src/printf.c +++ b/src/printf.c @@ -57,8 +57,6 @@ #include "system.h" #include "cl-strtod.h" -#include "die.h" -#include "error.h" #include "quote.h" #include "unicodeio.h" #include "xprintf.h" @@ -267,7 +265,7 @@ print_esc (char const *escstart, bool octal_0) ++esc_length, ++p) esc_value = esc_value * 16 + hextobin (*p); if (esc_length == 0) - die (EXIT_FAILURE, 0, _("missing hexadecimal number in escape")); + error (EXIT_FAILURE, 0, _("missing hexadecimal number in escape")); putchar (esc_value); } else if (isodigit (*p)) @@ -294,15 +292,15 @@ print_esc (char const *escstart, bool octal_0) --esc_length, ++p) { if (! isxdigit (to_uchar (*p))) - die (EXIT_FAILURE, 0, _("missing hexadecimal number in escape")); + error (EXIT_FAILURE, 0, _("missing hexadecimal number in escape")); uni_value = uni_value * 16 + hextobin (*p); } /* Error for invalid code points 0000D800 through 0000DFFF inclusive. Note print_unicode_char() would print the literal \u.. in this case. */ if (uni_value >= 0xd800 && uni_value <= 0xdfff) - die (EXIT_FAILURE, 0, _("invalid universal character name \\%c%0*x"), - esc_char, (esc_char == 'u' ? 4 : 8), uni_value); + error (EXIT_FAILURE, 0, _("invalid universal character name \\%c%0*x"), + esc_char, (esc_char == 'u' ? 4 : 8), uni_value); print_unicode_char (stdout, uni_value, 0); } @@ -574,8 +572,8 @@ print_formatted (char const *format, int argc, char **argv) if (INT_MIN <= width && width <= INT_MAX) field_width = width; else - die (EXIT_FAILURE, 0, _("invalid field width: %s"), - quote (*argv)); + error (EXIT_FAILURE, 0, _("invalid field width: %s"), + quote (*argv)); ++argv; --argc; } @@ -609,8 +607,8 @@ print_formatted (char const *format, int argc, char **argv) precision = -1; } else if (INT_MAX < prec) - die (EXIT_FAILURE, 0, _("invalid precision: %s"), - quote (*argv)); + error (EXIT_FAILURE, 0, _("invalid precision: %s"), + quote (*argv)); else precision = prec; ++argv; @@ -634,10 +632,11 @@ print_formatted (char const *format, int argc, char **argv) { unsigned char conversion = *f; + int speclen = MIN (f + 1 - direc_start, INT_MAX); if (! ok[conversion]) - die (EXIT_FAILURE, 0, - _("%.*s: invalid conversion specification"), - (int) (f + 1 - direc_start), direc_start); + error (EXIT_FAILURE, 0, + _("%.*s: invalid conversion specification"), + speclen, direc_start); } print_direc (direc_start, direc_length, *f, |
