From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: Re: [PATCH 4 of 6] Add sprintf() to hvmloader Date: Tue, 29 Nov 2011 12:01:57 +0100 Message-ID: <4ED4BBA5.4030403@amd.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Paul Durrant Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org On 11/29/11 11:53, Paul Durrant wrote: > # HG changeset patch > # User Paul Durrant > # Date 1322563734 0 > # Node ID e9997777ab6d629b97a8b8f020c18f40c4cf3aa0 > # Parent 58cdfa17fb8801ab0a9e8133e0ec2ad47a426f5d > Add sprintf() to hvmloader. For security reasons I prefer snprintf(). Christoph > > Signed-off-by: Paul Durrant > > 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@lists.xensource.com > http://lists.xensource.com/xen-devel > -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632