aboutsummaryrefslogtreecommitdiffstats
path: root/src/printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/printf.c')
-rw-r--r--src/printf.c25
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,