aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-20 00:48:50 -0700
committerRob Mensching <rob@firegiant.com>2021-04-20 01:05:41 -0700
commitd73c29407fe5ec6a0207af7d9c2547457ae0854c (patch)
treee073ba81b3d3b433624dbcbe3d1eef165e21deb1
parent10a2a1740616715f367536b9515bad5ff6c645e1 (diff)
downloadwix-d73c29407fe5ec6a0207af7d9c2547457ae0854c.tar.gz
wix-d73c29407fe5ec6a0207af7d9c2547457ae0854c.tar.bz2
wix-d73c29407fe5ec6a0207af7d9c2547457ae0854c.zip
Unport LocProbeForFileEx() as WiX v4 had better solution
-rw-r--r--src/dutil/inc/locutil.h12
-rw-r--r--src/dutil/locutil.cpp29
2 files changed, 9 insertions, 32 deletions
diff --git a/src/dutil/inc/locutil.h b/src/dutil/inc/locutil.h
index 626cb59e..38ddda20 100644
--- a/src/dutil/inc/locutil.h
+++ b/src/dutil/inc/locutil.h
@@ -50,18 +50,6 @@ HRESULT DAPI LocProbeForFile(
50 ); 50 );
51 51
52/******************************************************************** 52/********************************************************************
53 LocProbeForFileEx - Searches for a localization file on disk.
54 useUILanguage should be set to TRUE.
55*******************************************************************/
56HRESULT DAPI LocProbeForFileEx(
57 __in_z LPCWSTR wzBasePath,
58 __in_z LPCWSTR wzLocFileName,
59 __in_z_opt LPCWSTR wzLanguage,
60 __inout LPWSTR* psczPath,
61 __in BOOL fUseUILanguage
62 );
63
64/********************************************************************
65 LocLoadFromFile - Loads a localization file 53 LocLoadFromFile - Loads a localization file
66 54
67*******************************************************************/ 55*******************************************************************/
diff --git a/src/dutil/locutil.cpp b/src/dutil/locutil.cpp
index 43e1bb5b..c4567c03 100644
--- a/src/dutil/locutil.cpp
+++ b/src/dutil/locutil.cpp
@@ -51,7 +51,7 @@ static HRESULT ParseWxlControl(
51#ifndef MUI_MERGE_SYSTEM_FALLBACK 51#ifndef MUI_MERGE_SYSTEM_FALLBACK
52#define MUI_MERGE_SYSTEM_FALLBACK 0x10 // GetThreadPreferredUILanguages merges in parent and base languages 52#define MUI_MERGE_SYSTEM_FALLBACK 0x10 // GetThreadPreferredUILanguages merges in parent and base languages
53#endif 53#endif
54typedef WINBASEAPI BOOL (WINAPI *PFN_GET_THREAD_PREFERRED_UI_LANGUAGES) ( 54typedef WINBASEAPI BOOL (WINAPI *GET_THREAD_PREFERRED_UI_LANGUAGES) (
55 __in DWORD dwFlags, 55 __in DWORD dwFlags,
56 __out PULONG pulNumLanguages, 56 __out PULONG pulNumLanguages,
57 __out_ecount_opt(*pcchLanguagesBuffer) PZZWSTR pwszLanguagesBuffer, 57 __out_ecount_opt(*pcchLanguagesBuffer) PZZWSTR pwszLanguagesBuffer,
@@ -65,25 +65,14 @@ extern "C" HRESULT DAPI LocProbeForFile(
65 __inout LPWSTR* psczPath 65 __inout LPWSTR* psczPath
66 ) 66 )
67{ 67{
68 return LocProbeForFileEx(wzBasePath, wzLocFileName, wzLanguage, psczPath, FALSE);
69}
70
71extern "C" HRESULT DAPI LocProbeForFileEx(
72 __in_z LPCWSTR wzBasePath,
73 __in_z LPCWSTR wzLocFileName,
74 __in_z_opt LPCWSTR wzLanguage,
75 __inout LPWSTR* psczPath,
76 __in BOOL fUseUILanguage
77 )
78{
79 HRESULT hr = S_OK; 68 HRESULT hr = S_OK;
80 LPWSTR sczProbePath = NULL; 69 LPWSTR sczProbePath = NULL;
81 LANGID langid = 0; 70 LANGID langid = 0;
82 LPWSTR sczLangIdFile = NULL; 71 LPWSTR sczLangIdFile = NULL;
83 LPWSTR sczLangsBuff = NULL; 72 LPWSTR sczLangsBuff = NULL;
84 PFN_GET_THREAD_PREFERRED_UI_LANGUAGES pfnGetThreadPreferredUILanguages = 73 GET_THREAD_PREFERRED_UI_LANGUAGES pvfnGetThreadPreferredUILanguages =
85 reinterpret_cast<PFN_GET_THREAD_PREFERRED_UI_LANGUAGES>( 74 reinterpret_cast<GET_THREAD_PREFERRED_UI_LANGUAGES>(
86 ::GetProcAddress(::GetModuleHandle("Kernel32.dll"), "GetThreadPreferredUILanguages")); 75 GetProcAddress(GetModuleHandle("Kernel32.dll"), "GetThreadPreferredUILanguages"));
87 76
88 // If a language was specified, look for a loc file in that as a directory. 77 // If a language was specified, look for a loc file in that as a directory.
89 if (wzLanguage && *wzLanguage) 78 if (wzLanguage && *wzLanguage)
@@ -100,12 +89,12 @@ extern "C" HRESULT DAPI LocProbeForFileEx(
100 } 89 }
101 } 90 }
102 91
103 if (fUseUILanguage && pfnGetThreadPreferredUILanguages) 92 if (pvfnGetThreadPreferredUILanguages)
104 { 93 {
105 ULONG nLangs = 0; 94 ULONG nLangs;
106 ULONG cchLangs = 0; 95 ULONG cchLangs = 0;
107 DWORD dwFlags = MUI_LANGUAGE_ID | MUI_MERGE_USER_FALLBACK | MUI_MERGE_SYSTEM_FALLBACK; 96 DWORD dwFlags = MUI_LANGUAGE_ID | MUI_MERGE_USER_FALLBACK | MUI_MERGE_SYSTEM_FALLBACK;
108 if (!(*pfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, NULL, &cchLangs)) 97 if (!(*pvfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, NULL, &cchLangs))
109 { 98 {
110 LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return buffer size."); 99 LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return buffer size.");
111 } 100 }
@@ -114,7 +103,7 @@ extern "C" HRESULT DAPI LocProbeForFileEx(
114 LocExitOnFailure(hr, "Failed to allocate buffer for languages"); 103 LocExitOnFailure(hr, "Failed to allocate buffer for languages");
115 104
116 nLangs = 0; 105 nLangs = 0;
117 if (!(*pfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, sczLangsBuff, &cchLangs)) 106 if (!(*pvfnGetThreadPreferredUILanguages)(dwFlags, &nLangs, sczLangsBuff, &cchLangs))
118 { 107 {
119 LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return language list."); 108 LocExitWithLastError(hr, "GetThreadPreferredUILanguages failed to return language list.");
120 } 109 }
@@ -140,7 +129,7 @@ extern "C" HRESULT DAPI LocProbeForFileEx(
140 } 129 }
141 } 130 }
142 131
143 langid = fUseUILanguage ? ::GetUserDefaultUILanguage() : ::GetUserDefaultLangID(); 132 langid = ::GetUserDefaultUILanguage();
144 133
145 hr = StrAllocFormatted(&sczLangIdFile, L"%u\\%ls", langid, wzLocFileName); 134 hr = StrAllocFormatted(&sczLangIdFile, L"%u\\%ls", langid, wzLocFileName);
146 LocExitOnFailure(hr, "Failed to format user langid."); 135 LocExitOnFailure(hr, "Failed to format user langid.");