[KERNEL32] Sync format_msg.c with Wine Staging 1.7.55. CORE-10536
authorAmine Khaldi <amine.khaldi@reactos.org>
Fri, 27 Nov 2015 20:09:44 +0000 (20:09 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Fri, 27 Nov 2015 20:09:44 +0000 (20:09 +0000)
svn path=/trunk/; revision=70159

reactos/dll/win32/kernel32/winnls/string/format_msg.c
reactos/media/doc/README.WINE

index adc116e..2f01c20 100644 (file)
@@ -56,8 +56,6 @@ struct format_args
  * Yes, ANSI strings in win32 resources. Go figure.
  */
 
-static const WCHAR FMTWSTR[] = { '%','s',0 };
-
 /**********************************************************************
  *     load_message    (internal)
  */
@@ -92,6 +90,24 @@ static LPWSTR load_message( HMODULE module, UINT id, WORD lang )
     return buffer;
 }
 
+static LPWSTR search_message( DWORD flags, HMODULE module, UINT id, WORD lang )
+{
+    LPWSTR from = NULL;
+    if (flags & FORMAT_MESSAGE_FROM_HMODULE)
+        from = load_message( module, id, lang );
+    if (!from && (flags & FORMAT_MESSAGE_FROM_SYSTEM))
+    {
+        /* Fold win32 hresult to its embedded error code. */
+        if (HRESULT_SEVERITY(id) == SEVERITY_ERROR &&
+            HRESULT_FACILITY(id) == FACILITY_WIN32)
+        {
+            id = HRESULT_CODE(id);
+        }
+        from = load_message( kernel32_handle, id, lang );
+    }
+    return from;
+}
+
 /**********************************************************************
  *     get_arg    (internal)
  */
@@ -480,10 +496,7 @@ DWORD WINAPI FormatMessageA(
     }
     else if (dwFlags & (FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM))
     {
-        if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)
-            from = load_message( (HMODULE)lpSource, dwMessageId, dwLanguageId );
-        if (!from && (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM))
-            from = load_message( kernel32_handle, dwMessageId, dwLanguageId );
+        from = search_message( dwFlags, (HMODULE)lpSource, dwMessageId, dwLanguageId );
         if (!from) return 0;
     }
     else
@@ -580,10 +593,7 @@ DWORD WINAPI FormatMessageW(
     }
     else if (dwFlags & (FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM))
     {
-        if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)
-            from = load_message( (HMODULE)lpSource, dwMessageId, dwLanguageId );
-        if (!from && (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM))
-            from = load_message( kernel32_handle, dwMessageId, dwLanguageId );
+        from = search_message( dwFlags, (HMODULE)lpSource, dwMessageId, dwLanguageId );
         if (!from) return 0;
     }
     else
index a1ce4bb..3dbae20 100644 (file)
@@ -274,7 +274,7 @@ kernel32 -
   reactos/dll/win32/kernel32/winnls/string/casemap.c     # Synced to WineStaging-1.7.55
   reactos/dll/win32/kernel32/winnls/string/chartype.c    # Synced in r52754
   reactos/dll/win32/kernel32/winnls/string/collation.c   # Synced to WineStaging-1.7.55
-  reactos/dll/win32/kernel32/winnls/string/format_msg.c  # Synced to Wine-1.7.27
+  reactos/dll/win32/kernel32/winnls/string/format_msg.c  # Synced to WineStaging-1.7.55
   reactos/dll/win32/kernel32/winnls/string/lang.c        # Synced in r52754
   reactos/dll/win32/kernel32/winnls/string/lcformat.c    # Synced in r52754
   reactos/dll/win32/kernel32/winnls/string/nls.c         # Synced in r52754