A few small fixes.
diff --git a/loader/preloader.c b/loader/preloader.c
index 2ce5676..40f4e8a 100644
--- a/loader/preloader.c
+++ b/loader/preloader.c
@@ -156,9 +156,10 @@
* %x prints a hex number
* %s prints a string
*/
-static void wld_vsprintf(char *str, char *fmt, va_list args )
+static void wld_vsprintf(char *str, const char *fmt, va_list args )
{
- char *p = fmt;
+ static const char hex_chars[16] = "0123456789abcdef";
+ const char *p = fmt;
while( *p )
{
@@ -167,15 +168,10 @@
p++;
if( *p == 'x' )
{
- int ch, i, x = va_arg( args, int );
+ int i;
+ unsigned int x = va_arg( args, unsigned int );
for(i=7; i>=0; i--)
- {
- ch = (x>>(i*4))&0xf;
- ch += '0';
- if(ch>'9')
- ch+=('A'-10-'0');
- *str++ = ch;
- }
+ *str++ = hex_chars[(x>>(i*4))&0xf];
}
else if( *p == 's' )
{
@@ -192,7 +188,7 @@
*str = 0;
}
-static void wld_printf(char *fmt, ... )
+static void wld_printf(const char *fmt, ... )
{
va_list args;
char buffer[256];
@@ -203,7 +199,7 @@
write(2, buffer, strlen(buffer));
}
-static void fatal_error(char *fmt, ... )
+static void fatal_error(const char *fmt, ... )
{
va_list args;
char buffer[256];
@@ -253,7 +249,11 @@
{
for ( ; av->a_type != AT_NULL; av++)
if( av->a_type == type )
+ {
av->a_un.a_val = val;
+ return;
+ }
+ wld_printf( "wine-preloader: cannot set auxiliary value %x, please report\n", type );
}
/*
@@ -525,7 +525,7 @@
const ElfW(Phdr) *ph;
const ElfW(Sym) *symtab = NULL;
const char *strings = NULL;
- Elf_Symndx i, symtabend = 0;
+ uint32_t i, symtabend = 0;
/* check the values */
#ifdef DUMP_SYMS
@@ -556,7 +556,7 @@
if( dyn->d_tag == DT_SYMTAB )
symtab = (const ElfW(Sym) *)dyn->d_un.d_ptr;
if( dyn->d_tag == DT_HASH )
- symtabend = *((const Elf_Symndx *)dyn->d_un.d_ptr + 1);
+ symtabend = *((const uint32_t *)dyn->d_un.d_ptr + 1);
#ifdef DUMP_SYMS
wld_printf("%x %x\n", dyn->d_tag, dyn->d_un.d_ptr );
#endif