[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH 4 of 6] Add sprintf() to hvmloader
On 11/29/11 11:53, Paul Durrant wrote:
# HG changeset patch
# User Paul Durrant<paul.durrant@xxxxxxxxxx>
# Date 1322563734 0
# Node ID e9997777ab6d629b97a8b8f020c18f40c4cf3aa0
# Parent 58cdfa17fb8801ab0a9e8133e0ec2ad47a426f5d
Add sprintf() to hvmloader.
For security reasons I prefer snprintf().
Christoph
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
--
---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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|