- size = _cvt(_double, prec, buf, buf + sizeof(buf),
- *fmt) - buf;
+ /*
+ * don't bother to do unrealistic precision; just
+ * pad it with zeroes later. This keeps buffer size
+ * rational.
+ */
+ if (prec > MAXFRACT) {
+ fpprec = prec - MAXFRACT;
+ prec = MAXFRACT;
+ }
+ size = _cvt(_double, prec, flags, *fmt, padc, &sign,
+ buf, buf + sizeof(buf)) - buf;
+ t = buf;
+ /*
+ * zero-padded sign put out here; blank padded sign
+ * placed in number in _cvt().
+ */
+ if (sign && padc == '0') {
+ PUTC(sign);
+ --width;
+ }