if (type & SPECIAL) {
if (base == 8) {
*str++ = '0';
} else if (base == 16) {
*str++ = '0';
*str++ = digits[33];
}
}
if (!(type & LEFT)) {
while (size-- > 0) {
*str++ = c;
}
}
while (i < precision--) {
*str++ = '0';
}
while (i-- > 0) {
*str++ = tmp[i];
}
while (size-- > 0) {
*str++ = ' ';
}
return str;
}
int vsprintf(char *buf, const char *fmt, va_list args)
{
int len, i;
char *str, *s;
int *ip;
int flags; /* flags to number() */
int field_width; /* width of output field */
int precision; /* min. # of digits for integers; max number of chars for from string */
int qualifier; /* 'h', 'l', or 'L' for integer fields */
for (str = buf ; *fmt ; ++fmt) {
if (*fmt != '%') {
*str++ = *fmt;
continue;
}
/* process flags */
flags = 0;
repeat : ++fmt; /* this also skips first '%' */