case 'd':
case 'i':
flags |= SIGN;
case 'u':
str = number(str,
va_arg(args, unsigned long),
10,
field_width,
precision,
flags);
break;
case 'n':
ip = va_arg(args, int *);
*ip = (str - buf);
break;
default:
if (*fmt != '%') {
*str++ = '%';
}
if (*fmt) {
*str++ = *fmt;
} else {
--fmt;
}
break;
}
}
*str = '\0';
return str - buf;
}