[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4 of 6] Add sprintf() to hvmloader
# HG changeset patch # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1322563734 0 # Node ID e9997777ab6d629b97a8b8f020c18f40c4cf3aa0 # Parent 58cdfa17fb8801ab0a9e8133e0ec2ad47a426f5d Add sprintf() to hvmloader. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> diff -r 58cdfa17fb88 -r e9997777ab6d tools/firmware/hvmloader/util.c --- a/tools/firmware/hvmloader/util.c Tue Nov 29 10:48:54 2011 +0000 +++ b/tools/firmware/hvmloader/util.c Tue Nov 29 10:48:54 2011 +0000 @@ -528,7 +528,7 @@ static char *printnum(char *p, unsigned return p; } -static void _doprint(void (*put)(char), const char *fmt, va_list ap) +static void _doprint(void (*emit)(char**, char), char **arg, const char *fmt, va_list ap) { char *str, c; int lflag, zflag, nflag; @@ -540,7 +540,7 @@ static void _doprint(void (*put)(char), { if ( *fmt != '%' ) { - put(*fmt); + emit(arg, *fmt); continue; } @@ -571,7 +571,7 @@ static void _doprint(void (*put)(char), if ( (c == 'd') && ((long)value < 0) ) { value = -value; - put('-'); + emit(arg, '-'); } } else @@ -580,7 +580,7 @@ static void _doprint(void (*put)(char), if ( (c == 'd') && ((int)value < 0) ) { value = -(int)value; - put('-'); + emit(arg, '-'); } } str = buffer; @@ -588,13 +588,13 @@ static void _doprint(void (*put)(char), c == 'o' ? 8 : ((c == 'x') || (c == 'X') ? 16 : 10)); slen = strlen(str); for ( i = pad - slen; i > 0; i-- ) - put(zflag ? '0' : ' '); + emit(arg, zflag ? '0' : ' '); while ( *str ) { char ch = *str++; if ( (ch >= 'a') && (c == 'X') ) ch += 'A'-'a'; - put(ch); + emit(arg, ch); } } else if ( c == 's' ) @@ -603,20 +603,20 @@ static void _doprint(void (*put)(char), slen = strlen(str); if ( nflag == 0 ) for ( i = pad - slen; i > 0; i-- ) - put(' '); + emit(arg, ' '); while ( *str ) - put(*str++); + emit(arg, *str++); if ( nflag ) for ( i = pad - slen; i > 0; i-- ) - put(' '); + emit(arg, ' '); } else if ( c == 'c' ) { - put(va_arg(ap, int)); + emit(arg, va_arg(ap, int)); } else { - put(*fmt); + emit(arg, *fmt); } } } @@ -626,12 +626,17 @@ static void putchar(char c) outb(0xe9, c); } +static void __put(char **ignore, char c) +{ + putchar(c); +} + int printf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); - _doprint(putchar, fmt, ap); + _doprint(__put, NULL, fmt, ap); va_end(ap); return 0; @@ -639,7 +644,25 @@ int printf(const char *fmt, ...) int vprintf(const char *fmt, va_list ap) { - _doprint(putchar, fmt, ap); + _doprint(__put, NULL, fmt, ap); + return 0; +} + +static void __copy(char **buf, char c) +{ + **buf = c; + (*buf)++; +} + +int sprintf(char *buf, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + _doprint(__copy, &buf, fmt, ap); + va_end(ap); + + *buf = '\0'; return 0; } diff -r 58cdfa17fb88 -r e9997777ab6d tools/firmware/hvmloader/util.h --- a/tools/firmware/hvmloader/util.h Tue Nov 29 10:48:54 2011 +0000 +++ b/tools/firmware/hvmloader/util.h Tue Nov 29 10:48:54 2011 +0000 @@ -171,6 +171,9 @@ void uuid_to_string(char *dest, uint8_t int printf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); int vprintf(const char *fmt, va_list ap); +/* Buffer output */ +int sprintf(char *buf, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); + /* Populate specified memory hole with RAM. */ void mem_hole_populate_ram(xen_pfn_t mfn, uint32_t nr_mfns); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |