if (t->zero)
entry->append("0", 1);
- if (t->width)
- storeAppendPrintf(entry, "%d", (int) t->width);
+ if (t->widthMin >= 0)
+ storeAppendPrintf(entry, "%d", t->widthMin);
- if (t->precision)
- storeAppendPrintf(entry, ".%d", (int) t->precision);
+ if (t->widthMax >= 0)
+ storeAppendPrintf(entry, ".%d", t->widthMax);
if (arg)
storeAppendPrintf(entry, "{%s}", arg);
}
if (dooff) {
- snprintf(tmp, sizeof(tmp), "%0*" PRId64, fmt->zero ? (int) fmt->width : 0, outoff);
+ snprintf(tmp, sizeof(tmp), "%0*" PRId64, fmt->zero && fmt->widthMin >= 0 ? fmt->widthMin : 0, outoff);
out = tmp;
} else if (doint) {
- snprintf(tmp, sizeof(tmp), "%0*ld", fmt->zero ? (int) fmt->width : 0, outint);
+ snprintf(tmp, sizeof(tmp), "%0*ld", fmt->zero && fmt->widthMin >= 0 ? fmt->widthMin : 0, outint);
out = tmp;
}
}
// enforce width limits if configured
- const bool haveMaxWidth = fmt->precision && !doint && !dooff;
- if (haveMaxWidth || fmt->width) {
- const int minWidth = fmt->width ?
- static_cast<int>(fmt->width) : 0;
+ const bool haveMaxWidth = fmt->widthMax >=0 && !doint && !dooff;
+ if (haveMaxWidth || fmt->widthMin) {
+ const int minWidth = fmt->widthMin >= 0 ?
+ fmt->widthMin : 0;
const int maxWidth = haveMaxWidth ?
- static_cast<int>(fmt->precision) : strlen(out);
+ fmt->widthMax : strlen(out);
if (fmt->left)
mb.Printf("%-*.*s", minWidth, maxWidth, out);
}
if (xisdigit(*cur))
- width = strtol(cur, &cur, 10);
+ widthMin = strtol(cur, &cur, 10);
- if (*cur == '.')
- precision = strtol(cur + 1, &cur, 10);
+ if (*cur == '.' && xisdigit(*(++cur)))
+ widthMax = strtol(cur, &cur, 10);
if (*cur == '{') {
char *cp;
case LFT_TIME_SUBSECOND:
divisor = 1000;
- if (precision) {
+ if (widthMax > 0) {
int i;
divisor = 1000000;
- for (i = precision; i > 1; i--)
+ for (i = widthMax; i > 1; i--)
divisor /= 10;
if (!divisor)