X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Flib.c;h=eea64e0a5522be302cbd8e1035c09e228d25a37f;hb=872dbea3900b09c78092d3cdf035513f400bcfe8;hp=62500fe9d40de9e06938bf5f7605767fbae3edb9;hpb=bd8dc898108f10c0498f4dc5d0164a50b5ff2e5c;p=tpg%2Facess2.git diff --git a/Kernel/lib.c b/Kernel/lib.c index 62500fe9..eea64e0a 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -156,7 +156,14 @@ void itoa(char *buf, Uint num, int base, int minLength, char pad) buf[i] = 0; } -#define PUTCH(c) do{if(pos==__maxlen)break;if(__s){__s[pos++]=(c);}else{pos++;}}while(0) +/** + * \brief Append a character the the vsnprintf output + */ +#define PUTCH(c) do{\ + char ch=(c);\ + if(pos==__maxlen){return pos;}\ + if(__s){__s[pos++]=ch;}else{pos++;}\ + }while(0) int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) { char c, pad = ' '; @@ -167,12 +174,15 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) Uint64 val; size_t pos = 0; + Log("vsnprintf: (__s=%p, __maxlen=%i, __format='%s', ...)\n", __s, __maxlen, __format); + while((c = *__format++) != 0) { // Non control character if(c != '%') { PUTCH(c); continue; } c = *__format++; + //Log("pos = %i", pos); // Literal % if(c == '%') { PUTCH('%'); continue; } @@ -188,6 +198,8 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) // Get Argument val = va_arg(args, Uint); + //Log("val = %x", val); + // - Padding if(c == '0') { @@ -258,6 +270,7 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) case 's': p = (char*)(Uint)val; printString: + //Log("p = '%s'", p); if(!p) p = "(null)"; while(*p) PUTCH(*p++); break; @@ -274,14 +287,10 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) PUTCH( (Uint8)val ); break; } - - if(pos == __maxlen) - break; } if(__s && pos != __maxlen) __s[pos] = '\0'; - return pos; }