From cc5e6fe6a62aa35fb2be8772a58b8149c0b019cb Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Thu, 18 Jul 2013 20:29:18 +0000 Subject: [PATCH] [INFLIB] - Avoid use of swprintf, which is blatantly incompatible with -fshort-wchar CORE-6918 #resolve svn path=/trunk/; revision=59504 --- reactos/lib/inflib/CMakeLists.txt | 3 --- reactos/lib/inflib/infget.c | 24 +++++++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/reactos/lib/inflib/CMakeLists.txt b/reactos/lib/inflib/CMakeLists.txt index 647dc5aa98f..418b454a7fb 100644 --- a/reactos/lib/inflib/CMakeLists.txt +++ b/reactos/lib/inflib/CMakeLists.txt @@ -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") diff --git a/reactos/lib/inflib/infget.c b/reactos/lib/inflib/infget.c index 666f71232da..a79dfed32b6 100644 --- a/reactos/lib/inflib/infget.c +++ b/reactos/lib/inflib/infget.c @@ -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,