# HG changeset patch # User mir3636 # Date 1523094258 -32400 # Node ID 45035047d1863dcc786a1f06cf29985d31aa80f2 # Parent 33c9000056b502a8a4cb9b6ea96067e46b7ff60e use stdarg for printf diff -r 33c9000056b5 -r 45035047d186 src/usr/printf.c --- a/src/usr/printf.c Sat Apr 07 15:50:32 2018 +0900 +++ b/src/usr/printf.c Sat Apr 07 18:44:18 2018 +0900 @@ -1,6 +1,7 @@ #include "types.h" #include "stat.h" #include "user.h" +#include static void putc(int fd, char c) @@ -41,10 +42,10 @@ { char *s; int c, i, state; - uint *ap; + va_list ap; state = 0; - ap = (uint*)(void*)&fmt + 1; + va_start(ap, fmt); for(i = 0; fmt[i]; i++){ c = fmt[i] & 0xff; if(state == 0){ @@ -55,14 +56,11 @@ } } else if(state == '%'){ if(c == 'd'){ - printint(fd, *ap, 10, 1); - ap++; + printint(fd, va_arg(ap,int), 10, 1); } else if(c == 'x' || c == 'p'){ - printint(fd, *ap, 16, 0); - ap++; + printint(fd, va_arg(ap,int), 16, 0); } else if(c == 's'){ - s = (char*)*ap; - ap++; + s = va_arg(ap,char*); if(s == 0) s = "(null)"; while(*s != 0){ @@ -70,8 +68,7 @@ s++; } } else if(c == 'c'){ - putc(fd, *ap); - ap++; + putc(fd, va_arg(ap,int)); } else if(c == '%'){ putc(fd, c); } else { @@ -82,4 +79,5 @@ state = 0; } } + va_end(ap); }