[INFLIB]
authorThomas Faber <thomas.faber@reactos.org>
Thu, 18 Jul 2013 20:29:18 +0000 (20:29 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Thu, 18 Jul 2013 20:29:18 +0000 (20:29 +0000)
- Avoid use of swprintf, which is blatantly incompatible with -fshort-wchar
CORE-6918 #resolve

svn path=/trunk/; revision=59504

reactos/lib/inflib/CMakeLists.txt
reactos/lib/inflib/infget.c

index 647dc5a..418b454 100644 (file)
@@ -21,9 +21,6 @@ else()
         infhostrtl.c)
 
     add_definitions(-D__NO_CTYPE_INLINES -DINFLIB_HOST)
-    if(MSVC)
-        add_definitions(-D_CRT_NON_CONFORMING_SWPRINTFS)
-    endif()
     add_library(inflibhost ${GLOBAL_FILES} ${SOURCE})
     if(NOT MSVC)
         add_target_compile_flags(inflibhost "-Wpointer-arith -Wwrite-strings")
index 666f712..a79dfed 100644 (file)
@@ -19,6 +19,18 @@ InfpSubstituteString(PINFCACHE Inf,
                      WCHAR *buffer,
                      unsigned int size);
 
+static void
+ShortToHex(PWCHAR Buffer,
+           USHORT Value)
+{
+    WCHAR HexDigits[] = L"0123456789abcdef";
+
+    Buffer[0] = HexDigits[Value >> 12 & 0xf];
+    Buffer[1] = HexDigits[Value >>  8 & 0xf];
+    Buffer[2] = HexDigits[Value >>  4 & 0xf];
+    Buffer[3] = HexDigits[Value >>  0 & 0xf];
+}
+
 /* retrieve the string substitution for a given string, or NULL if not found */
 /* if found, len is set to the substitution length */
 static PCWSTR
@@ -33,7 +45,7 @@ InfpGetSubstitutionString(PINFCACHE Inf,
     PINFCONTEXT Context = NULL;
     PWCHAR Data = NULL;
     WCHAR ValueName[MAX_INF_STRING_LENGTH +1];
-    WCHAR StringLangId[13];
+    WCHAR StringLangId[] = L"Strings.XXXX";
 
     if (!*len)  /* empty string (%%) is replaced by single percent */
     {
@@ -48,9 +60,8 @@ InfpGetSubstitutionString(PINFCACHE Inf,
 
     if (Inf->LanguageId != 0)
     {
-        swprintf(StringLangId,
-                 L"Strings.%04hx",
-                 Inf->LanguageId);
+        ShortToHex(&StringLangId[sizeof("Strings.") - 1],
+                   Inf->LanguageId);
 
         Status = InfpFindFirstLine(Inf,
                                    StringLangId,
@@ -58,9 +69,8 @@ InfpGetSubstitutionString(PINFCACHE Inf,
                                    &Context);
         if (Status != INF_STATUS_SUCCESS)
         {
-            swprintf(StringLangId,
-                     L"Strings.%04hx",
-                     MAKELANGID(PRIMARYLANGID(Inf->LanguageId), SUBLANG_NEUTRAL));
+            ShortToHex(&StringLangId[sizeof("Strings.") - 1],
+                       MAKELANGID(PRIMARYLANGID(Inf->LanguageId), SUBLANG_NEUTRAL));
 
             Status = InfpFindFirstLine(Inf,
                                        StringLangId,