X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_scan.c;h=c9b882da395bb987e89496cebabea4db28700d94;hp=4365e350c39f8b1aae6bd457ebb089e0379cdcf7;hb=076b15369a863a489181015d3d9a39db38c6856d;hpb=4885712264980e6cbc2039f9158027bee9213475 diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index 4365e35..c9b882d 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -88,6 +88,25 @@ match (char *str, char *sub) /* * macros to format data */ +#define PUTDF(cp, num, wid, fill)\ + if (cp + wid < ep) {\ + if ((i = (num)) < 0)\ + i = -(num);\ + if ((c = (wid)) < 0)\ + c = -c;\ + sp = cp + c;\ + do {\ + *--sp = (i % 10) + '0';\ + i /= 10;\ + } while (i > 0 && sp > cp);\ + if (i > 0)\ + *sp = '?';\ + else if ((num) < 0 && sp > cp)\ + *--sp = '-';\ + while (sp > cp)\ + *--sp = fill;\ + cp += c;\ + } #ifdef LOCALE #define PUTSF(cp, str, wid, fill) {\ @@ -310,12 +329,7 @@ fmt_scan (struct format *format, char *scanl, int width, int *dat) if (n >= 0) cp += n; break; case FT_NUMF: - n = snprintf(cp, ep - cp, "%d", value); - if (n >= 0) { - cp += n; - } else n = 0; - c = abs(fmt->f_width) - n; - for (; (c > 0) && (cp < ep); c--) *cp++ = fmt->f_fill; + PUTDF (cp, value, fmt->f_width, fmt->f_fill); break; case FT_CHAR: