out_dgt(dgt);
}
-int printf(const char *fmt, ...)
+int vprintf(const char *fmt, va_list va)
{
- va_list va;
char ch;
char *p;
unsigned int num;
char buf[12];
unsigned int div;
- va_start(va, fmt);
-
while ((ch = *(fmt++))) {
if (ch != '%') {
putc(ch);
num = -(int)num;
out('-');
}
- for (div = 1000000000; div; div /= 10)
- div_out(&num, div);
+ if (!num) {
+ out_dgt(0);
+ } else {
+ for (div = 1000000000; div; div /= 10)
+ div_out(&num, div);
+ }
break;
case 'x':
num = va_arg(va, unsigned int);
- for (div = 0x10000000; div; div /= 0x10)
- div_out(&num, div);
+ if (!num) {
+ out_dgt(0);
+ } else {
+ for (div = 0x10000000; div; div /= 0x10)
+ div_out(&num, div);
+ }
break;
case 'c':
out((char)(va_arg(va, int)));
w--;
while (w-- > 0)
putc(lz ? '0' : ' ');
- while ((ch = *p++))
- putc(ch);
+ if (p) {
+ while ((ch = *p++))
+ putc(ch);
+ }
}
}
abort:
- va_end(va);
return 0;
}
+
+int printf(const char *fmt, ...)
+{
+ va_list va;
+ int ret;
+
+ va_start(va, fmt);
+ ret = vprintf(fmt, va);
+ va_end(va);
+
+ return ret;
+}