From bc73e64bb5f7c23c6943c535780b590bec743468 Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 7 Jun 2000 07:32:07 +0000 Subject: [PATCH] (emacs_doprnt_1): Fix problem with %0XXd for a negative integer. --- src/doprnt.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/doprnt.c b/src/doprnt.c index fabbf99..b224d50 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -657,16 +657,21 @@ emacs_doprnt_1 (Lisp_Object stream, const Bufbyte *format_nonreloc, long_to_string (constructed_spec + strlen (constructed_spec), spec->precision); } - sprintf (constructed_spec + strlen (constructed_spec), "%c", ch); /* sprintf the mofo */ /* we have to use separate calls to sprintf(), rather than a single big conditional, because of the different types of the arguments */ if (strchr (double_converters, ch)) - sprintf (text_to_print, constructed_spec, arg.d); + { + sprintf (constructed_spec + strlen (constructed_spec), + "%c", ch); + sprintf (text_to_print, constructed_spec, arg.d); + } else if (strchr (unsigned_int_converters, ch)) { + sprintf (constructed_spec + strlen (constructed_spec), + "%c", ch); if (spec->l_flag) sprintf (text_to_print, constructed_spec, arg.ul); else @@ -674,6 +679,12 @@ emacs_doprnt_1 (Lisp_Object stream, const Bufbyte *format_nonreloc, } else { + if (spec->zero_flag && spec->minwidth) + sprintf (constructed_spec + strlen (constructed_spec), + "0%d%c", spec->minwidth, ch); + else + sprintf (constructed_spec + strlen (constructed_spec), + "%c", ch); if (spec->l_flag) sprintf (text_to_print, constructed_spec, arg.l); else -- 1.7.10.4