diff --git a/dlls/user/wsprintf.c b/dlls/user/wsprintf.c
index 346530f6fac..87a13cab1bf 100644
--- a/dlls/user/wsprintf.c
+++ b/dlls/user/wsprintf.c
@@ -250,31 +250,6 @@ static UINT WPRINTF_GetLen( WPRINTF_FORMAT *format, WPRINTF_DATA *arg,
     return len;
 }
 
-/***********************************************************************
- *           WPRINTF_ExtractVAPtr
- */
-static WPRINTF_DATA WPRINTF_ExtractVAPtr( WPRINTF_FORMAT *format, va_list* args )
-{
-    WPRINTF_DATA result;
-    switch(format->type)
-    {
-        case WPR_WCHAR:
-            result.wchar_view = (WCHAR)va_arg( *args, int );break;
-        case WPR_CHAR:
-            result.char_view = (CHAR)va_arg( *args, int );  break;
-        case WPR_STRING:
-            result.lpcstr_view = va_arg( *args, LPCSTR);    break;
-        case WPR_WSTRING:
-            result.lpcwstr_view = va_arg( *args, LPCWSTR);  break;
-        case WPR_HEXA:
-        case WPR_SIGNED:
-        case WPR_UNSIGNED:
-            result.int_view = va_arg( *args, INT );         break;
-        default:
-            result.wchar_view = 0;                          break;
-    }
-    return result;
-}
 
 /***********************************************************************
  *           wvsnprintf16   (Not a Windows API)
@@ -371,7 +346,7 @@ static INT16 wvsnprintf16( LPSTR buffer, UINT16 maxlen, LPCSTR spec,
 
 
 /***********************************************************************
- *           wvsnprintfA   (Not a Windows API, but we export it from USER32 anyway)
+ *           wvsnprintfA   (USER32.@) (Not a Windows API, but we export it from USER32 anyway)
  */
 INT WINAPI wvsnprintfA( LPSTR buffer, UINT maxlen, LPCSTR spec, va_list args )
 {
@@ -389,7 +364,31 @@ INT WINAPI wvsnprintfA( LPSTR buffer, UINT maxlen, LPCSTR spec, va_list args )
         spec++;
         if (*spec == '%') { *p++ = *spec++; maxlen--; continue; }
         spec += WPRINTF_ParseFormatA( spec, &format );
-        argData = WPRINTF_ExtractVAPtr( &format, &args );
+
+        switch(format.type)
+        {
+        case WPR_WCHAR:
+            argData.wchar_view = (WCHAR)va_arg( args, int );
+            break;
+        case WPR_CHAR:
+            argData.char_view = (CHAR)va_arg( args, int );
+            break;
+        case WPR_STRING:
+            argData.lpcstr_view = va_arg( args, LPCSTR );
+            break;
+        case WPR_WSTRING:
+            argData.lpcwstr_view = va_arg( args, LPCWSTR );
+            break;
+        case WPR_HEXA:
+        case WPR_SIGNED:
+        case WPR_UNSIGNED:
+            argData.int_view = va_arg( args, INT );
+            break;
+        default:
+            argData.wchar_view = 0;
+            break;
+        }
+
         len = WPRINTF_GetLen( &format, &argData, number, maxlen - 1 );
         if (!(format.flags & WPRINTF_LEFTALIGN))
             for (i = format.precision; i < format.width; i++, maxlen--)
@@ -448,7 +447,7 @@ INT WINAPI wvsnprintfA( LPSTR buffer, UINT maxlen, LPCSTR spec, va_list args )
 
 
 /***********************************************************************
- *           wvsnprintfW   (Not a Windows API, but we export it from USER32 anyway)
+ *           wvsnprintfW   (USER32.@) (Not a Windows API, but we export it from USER32 anyway)
  */
 INT WINAPI wvsnprintfW( LPWSTR buffer, UINT maxlen, LPCWSTR spec, va_list args )
 {
@@ -466,7 +465,31 @@ INT WINAPI wvsnprintfW( LPWSTR buffer, UINT maxlen, LPCWSTR spec, va_list args )
         spec++;
         if (*spec == '%') { *p++ = *spec++; maxlen--; continue; }
         spec += WPRINTF_ParseFormatW( spec, &format );
-        argData = WPRINTF_ExtractVAPtr( &format, &args );
+
+        switch(format.type)
+        {
+        case WPR_WCHAR:
+            argData.wchar_view = (WCHAR)va_arg( args, int );
+            break;
+        case WPR_CHAR:
+            argData.char_view = (CHAR)va_arg( args, int );
+            break;
+        case WPR_STRING:
+            argData.lpcstr_view = va_arg( args, LPCSTR );
+            break;
+        case WPR_WSTRING:
+            argData.lpcwstr_view = va_arg( args, LPCWSTR );
+            break;
+        case WPR_HEXA:
+        case WPR_SIGNED:
+        case WPR_UNSIGNED:
+            argData.int_view = va_arg( args, INT );
+            break;
+        default:
+            argData.wchar_view = 0;
+            break;
+        }
+
         len = WPRINTF_GetLen( &format, &argData, number, maxlen - 1 );
         if (!(format.flags & WPRINTF_LEFTALIGN))
             for (i = format.precision; i < format.width; i++, maxlen--)
@@ -537,7 +560,7 @@ INT16 WINAPI wvsprintf16( LPSTR buffer, LPCSTR spec, LPCVOID args )
 
 
 /***********************************************************************
- *           wvsprintfA   (USER32.587)
+ *           wvsprintfA   (USER32.@)
  */
 INT WINAPI wvsprintfA( LPSTR buffer, LPCSTR spec, va_list args )
 {
@@ -547,7 +570,7 @@ INT WINAPI wvsprintfA( LPSTR buffer, LPCSTR spec, va_list args )
 
 
 /***********************************************************************
- *           wvsprintfW   (USER32.588)
+ *           wvsprintfW   (USER32.@)
  */
 INT WINAPI wvsprintfW( LPWSTR buffer, LPCWSTR spec, va_list args )
 {
@@ -575,7 +598,7 @@ INT16 WINAPIV wsprintf16(void)
 
 
 /***********************************************************************
- *           wsprintfA   (USER32.585)
+ *           wsprintfA   (USER32.@)
  */
 INT WINAPIV wsprintfA( LPSTR buffer, LPCSTR spec, ... )
 {
@@ -590,7 +613,7 @@ INT WINAPIV wsprintfA( LPSTR buffer, LPCSTR spec, ... )
 
 
 /***********************************************************************
- *           wsprintfW   (USER32.586)
+ *           wsprintfW   (USER32.@)
  */
 INT WINAPIV wsprintfW( LPWSTR buffer, LPCWSTR spec, ... )
 {