diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-03-02 14:19:14 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-03-02 15:40:02 -0600 |
| commit | 10ebf674da5df9224e4eddd3545518434c5b455b (patch) | |
| tree | ea1f4063edd46e9942eab94dd7adb2f75c6c589e /src/dutil/reswutil.cpp | |
| parent | 3bbf1347b900ec115a12faf8f46965c9b7649696 (diff) | |
| download | wix-10ebf674da5df9224e4eddd3545518434c5b455b.tar.gz wix-10ebf674da5df9224e4eddd3545518434c5b455b.tar.bz2 wix-10ebf674da5df9224e4eddd3545518434c5b455b.zip | |
Update rest of dutil to use their own source with the Exit* macros.
Fix some CA warnings.
Diffstat (limited to 'src/dutil/reswutil.cpp')
| -rw-r--r-- | src/dutil/reswutil.cpp | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/src/dutil/reswutil.cpp b/src/dutil/reswutil.cpp index e534fc09..42b49c55 100644 --- a/src/dutil/reswutil.cpp +++ b/src/dutil/reswutil.cpp | |||
| @@ -2,6 +2,21 @@ | |||
| 2 | 2 | ||
| 3 | #include "precomp.h" | 3 | #include "precomp.h" |
| 4 | 4 | ||
| 5 | |||
| 6 | // Exit macros | ||
| 7 | #define ReswExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 8 | #define ReswExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 9 | #define ReswExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 10 | #define ReswExitOnFailure(x, s, ...) ExitOnFailureSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 11 | #define ReswExitOnRootFailure(x, s, ...) ExitOnRootFailureSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 12 | #define ReswExitOnFailureDebugTrace(x, s, ...) ExitOnFailureDebugTraceSource(DUTIL_SOURCE_RESWUTIL, x, s, __VA_ARGS__) | ||
| 13 | #define ReswExitOnNull(p, x, e, s, ...) ExitOnNullSource(DUTIL_SOURCE_RESWUTIL, p, x, e, s, __VA_ARGS__) | ||
| 14 | #define ReswExitOnNullWithLastError(p, x, s, ...) ExitOnNullWithLastErrorSource(DUTIL_SOURCE_RESWUTIL, p, x, s, __VA_ARGS__) | ||
| 15 | #define ReswExitOnNullDebugTrace(p, x, e, s, ...) ExitOnNullDebugTraceSource(DUTIL_SOURCE_RESWUTIL, p, x, e, s, __VA_ARGS__) | ||
| 16 | #define ReswExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_RESWUTIL, p, x, s, __VA_ARGS__) | ||
| 17 | #define ReswExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_RESWUTIL, e, x, s, __VA_ARGS__) | ||
| 18 | #define ReswExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_RESWUTIL, g, x, s, __VA_ARGS__) | ||
| 19 | |||
| 5 | #define RES_STRINGS_PER_BLOCK 16 | 20 | #define RES_STRINGS_PER_BLOCK 16 |
| 6 | 21 | ||
| 7 | // Internal data structure format for a string block in a resource table. | 22 | // Internal data structure format for a string block in a resource table. |
| @@ -66,31 +81,31 @@ extern "C" HRESULT DAPI ResWriteString( | |||
| 66 | DWORD dwStringId = (dwDataId % RES_STRINGS_PER_BLOCK); | 81 | DWORD dwStringId = (dwDataId % RES_STRINGS_PER_BLOCK); |
| 67 | 82 | ||
| 68 | hModule = LoadLibraryExW(wzResourceFile, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); | 83 | hModule = LoadLibraryExW(wzResourceFile, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); |
| 69 | ExitOnNullWithLastError(hModule, hr, "Failed to load library: %ls", wzResourceFile); | 84 | ReswExitOnNullWithLastError(hModule, hr, "Failed to load library: %ls", wzResourceFile); |
| 70 | 85 | ||
| 71 | hr = StringBlockInitialize(hModule, dwBlockId, wLangId, &StrBlock); | 86 | hr = StringBlockInitialize(hModule, dwBlockId, wLangId, &StrBlock); |
| 72 | ExitOnFailure(hr, "Failed to get string block to update."); | 87 | ReswExitOnFailure(hr, "Failed to get string block to update."); |
| 73 | 88 | ||
| 74 | hr = StringBlockChangeString(&StrBlock, dwStringId, wzData); | 89 | hr = StringBlockChangeString(&StrBlock, dwStringId, wzData); |
| 75 | ExitOnFailure(hr, "Failed to update string block string."); | 90 | ReswExitOnFailure(hr, "Failed to update string block string."); |
| 76 | 91 | ||
| 77 | hr = StringBlockConvertToResourceData(&StrBlock, &pvData, &cbData); | 92 | hr = StringBlockConvertToResourceData(&StrBlock, &pvData, &cbData); |
| 78 | ExitOnFailure(hr, "Failed to convert string block to resource data."); | 93 | ReswExitOnFailure(hr, "Failed to convert string block to resource data."); |
| 79 | 94 | ||
| 80 | ::FreeLibrary(hModule); | 95 | ::FreeLibrary(hModule); |
| 81 | hModule = NULL; | 96 | hModule = NULL; |
| 82 | 97 | ||
| 83 | hUpdate = ::BeginUpdateResourceW(wzResourceFile, FALSE); | 98 | hUpdate = ::BeginUpdateResourceW(wzResourceFile, FALSE); |
| 84 | ExitOnNullWithLastError(hUpdate, hr, "Failed to ::BeginUpdateResourcesW."); | 99 | ReswExitOnNullWithLastError(hUpdate, hr, "Failed to ::BeginUpdateResourcesW."); |
| 85 | 100 | ||
| 86 | if (!::UpdateResourceA(hUpdate, RT_STRING, MAKEINTRESOURCE(dwBlockId), wLangId, pvData, cbData)) | 101 | if (!::UpdateResourceA(hUpdate, RT_STRING, MAKEINTRESOURCE(dwBlockId), wLangId, pvData, cbData)) |
| 87 | { | 102 | { |
| 88 | ExitWithLastError(hr, "Failed to ::UpdateResourceA."); | 103 | ReswExitWithLastError(hr, "Failed to ::UpdateResourceA."); |
| 89 | } | 104 | } |
| 90 | 105 | ||
| 91 | if (!::EndUpdateResource(hUpdate, FALSE)) | 106 | if (!::EndUpdateResource(hUpdate, FALSE)) |
| 92 | { | 107 | { |
| 93 | ExitWithLastError(hr, "Failed to ::EndUpdateResourceW."); | 108 | ReswExitWithLastError(hr, "Failed to ::EndUpdateResourceW."); |
| 94 | } | 109 | } |
| 95 | 110 | ||
| 96 | hUpdate = NULL; | 111 | hUpdate = NULL; |
| @@ -134,16 +149,16 @@ extern "C" HRESULT DAPI ResWriteData( | |||
| 134 | HANDLE hUpdate = NULL; | 149 | HANDLE hUpdate = NULL; |
| 135 | 150 | ||
| 136 | hUpdate = ::BeginUpdateResourceW(wzResourceFile, FALSE); | 151 | hUpdate = ::BeginUpdateResourceW(wzResourceFile, FALSE); |
| 137 | ExitOnNullWithLastError(hUpdate, hr, "Failed to ::BeginUpdateResourcesW."); | 152 | ReswExitOnNullWithLastError(hUpdate, hr, "Failed to ::BeginUpdateResourcesW."); |
| 138 | 153 | ||
| 139 | if (!::UpdateResourceA(hUpdate, RT_RCDATA, szDataName, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), pData, cbData)) | 154 | if (!::UpdateResourceA(hUpdate, RT_RCDATA, szDataName, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), pData, cbData)) |
| 140 | { | 155 | { |
| 141 | ExitWithLastError(hr, "Failed to ::UpdateResourceA."); | 156 | ReswExitWithLastError(hr, "Failed to ::UpdateResourceA."); |
| 142 | } | 157 | } |
| 143 | 158 | ||
| 144 | if (!::EndUpdateResource(hUpdate, FALSE)) | 159 | if (!::EndUpdateResource(hUpdate, FALSE)) |
| 145 | { | 160 | { |
| 146 | ExitWithLastError(hr, "Failed to ::EndUpdateResourceW."); | 161 | ReswExitWithLastError(hr, "Failed to ::EndUpdateResourceW."); |
| 147 | } | 162 | } |
| 148 | 163 | ||
| 149 | hUpdate = NULL; | 164 | hUpdate = NULL; |
| @@ -177,23 +192,23 @@ extern "C" HRESULT DAPI ResImportDataFromFile( | |||
| 177 | hFile = ::CreateFileW(wzSourceFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | 192 | hFile = ::CreateFileW(wzSourceFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| 178 | if (INVALID_HANDLE_VALUE == hFile) | 193 | if (INVALID_HANDLE_VALUE == hFile) |
| 179 | { | 194 | { |
| 180 | ExitWithLastError(hr, "Failed to CreateFileW for %ls.", wzSourceFile); | 195 | ReswExitWithLastError(hr, "Failed to CreateFileW for %ls.", wzSourceFile); |
| 181 | } | 196 | } |
| 182 | 197 | ||
| 183 | cbFile = ::GetFileSize(hFile, NULL); | 198 | cbFile = ::GetFileSize(hFile, NULL); |
| 184 | if (!cbFile) | 199 | if (!cbFile) |
| 185 | { | 200 | { |
| 186 | ExitWithLastError(hr, "Failed to GetFileSize for %ls.", wzSourceFile); | 201 | ReswExitWithLastError(hr, "Failed to GetFileSize for %ls.", wzSourceFile); |
| 187 | } | 202 | } |
| 188 | 203 | ||
| 189 | hMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); | 204 | hMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); |
| 190 | ExitOnNullWithLastError(hMap, hr, "Failed to CreateFileMapping for %ls.", wzSourceFile); | 205 | ReswExitOnNullWithLastError(hMap, hr, "Failed to CreateFileMapping for %ls.", wzSourceFile); |
| 191 | 206 | ||
| 192 | pv = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, cbFile); | 207 | pv = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, cbFile); |
| 193 | ExitOnNullWithLastError(pv, hr, "Failed to MapViewOfFile for %ls.", wzSourceFile); | 208 | ReswExitOnNullWithLastError(pv, hr, "Failed to MapViewOfFile for %ls.", wzSourceFile); |
| 194 | 209 | ||
| 195 | hr = ResWriteData(wzTargetFile, szDataName, pv, cbFile); | 210 | hr = ResWriteData(wzTargetFile, szDataName, pv, cbFile); |
| 196 | ExitOnFailure(hr, "Failed to ResSetData %s on file %ls.", szDataName, wzTargetFile); | 211 | ReswExitOnFailure(hr, "Failed to ResSetData %s on file %ls.", szDataName, wzTargetFile); |
| 197 | 212 | ||
| 198 | LExit: | 213 | LExit: |
| 199 | if (pv) | 214 | if (pv) |
| @@ -226,25 +241,25 @@ static HRESULT StringBlockInitialize( | |||
| 226 | DWORD cbData = 0; | 241 | DWORD cbData = 0; |
| 227 | 242 | ||
| 228 | hRsrc = ::FindResourceExA(hModule, RT_STRING, MAKEINTRESOURCE(dwBlockId), wLangId); | 243 | hRsrc = ::FindResourceExA(hModule, RT_STRING, MAKEINTRESOURCE(dwBlockId), wLangId); |
| 229 | ExitOnNullWithLastError(hRsrc, hr, "Failed to ::FindResourceExW."); | 244 | ReswExitOnNullWithLastError(hRsrc, hr, "Failed to ::FindResourceExW."); |
| 230 | 245 | ||
| 231 | hData = ::LoadResource(hModule, hRsrc); | 246 | hData = ::LoadResource(hModule, hRsrc); |
| 232 | ExitOnNullWithLastError(hData, hr, "Failed to ::LoadResource."); | 247 | ReswExitOnNullWithLastError(hData, hr, "Failed to ::LoadResource."); |
| 233 | 248 | ||
| 234 | cbData = ::SizeofResource(hModule, hRsrc); | 249 | cbData = ::SizeofResource(hModule, hRsrc); |
| 235 | if (!cbData) | 250 | if (!cbData) |
| 236 | { | 251 | { |
| 237 | ExitWithLastError(hr, "Failed to ::SizeofResource."); | 252 | ReswExitWithLastError(hr, "Failed to ::SizeofResource."); |
| 238 | } | 253 | } |
| 239 | 254 | ||
| 240 | pvData = ::LockResource(hData); | 255 | pvData = ::LockResource(hData); |
| 241 | ExitOnNullWithLastError(pvData, hr, "Failed to lock data resource."); | 256 | ReswExitOnNullWithLastError(pvData, hr, "Failed to lock data resource."); |
| 242 | 257 | ||
| 243 | pStrBlock->dwBlockId = dwBlockId; | 258 | pStrBlock->dwBlockId = dwBlockId; |
| 244 | pStrBlock->wLangId = wLangId; | 259 | pStrBlock->wLangId = wLangId; |
| 245 | 260 | ||
| 246 | hr = StringBlockConvertFromResourceData(pStrBlock, pvData, cbData); | 261 | hr = StringBlockConvertFromResourceData(pStrBlock, pvData, cbData); |
| 247 | ExitOnFailure(hr, "Failed to convert string block from resource data."); | 262 | ReswExitOnFailure(hr, "Failed to convert string block from resource data."); |
| 248 | 263 | ||
| 249 | LExit: | 264 | LExit: |
| 250 | return hr; | 265 | return hr; |
| @@ -276,10 +291,10 @@ static HRESULT StringBlockChangeString( | |||
| 276 | DWORD cchData = lstrlenW(szData); | 291 | DWORD cchData = lstrlenW(szData); |
| 277 | 292 | ||
| 278 | pwzData = static_cast<LPWSTR>(MemAlloc((cchData + 1) * sizeof(WCHAR), TRUE)); | 293 | pwzData = static_cast<LPWSTR>(MemAlloc((cchData + 1) * sizeof(WCHAR), TRUE)); |
| 279 | ExitOnNull(pwzData, hr, E_OUTOFMEMORY, "Failed to allocate new block string."); | 294 | ReswExitOnNull(pwzData, hr, E_OUTOFMEMORY, "Failed to allocate new block string."); |
| 280 | 295 | ||
| 281 | hr = ::StringCchCopyW(pwzData, cchData + 1, szData); | 296 | hr = ::StringCchCopyW(pwzData, cchData + 1, szData); |
| 282 | ExitOnFailure(hr, "Failed to copy new block string."); | 297 | ReswExitOnFailure(hr, "Failed to copy new block string."); |
| 283 | 298 | ||
| 284 | ReleaseNullMem(pStrBlock->rgwz[dwStringId]); | 299 | ReleaseNullMem(pStrBlock->rgwz[dwStringId]); |
| 285 | 300 | ||
| @@ -311,7 +326,7 @@ static HRESULT StringBlockConvertToResourceData( | |||
| 311 | cbData *= sizeof(WCHAR); | 326 | cbData *= sizeof(WCHAR); |
| 312 | 327 | ||
| 313 | pvData = MemAlloc(cbData, TRUE); | 328 | pvData = MemAlloc(cbData, TRUE); |
| 314 | ExitOnNull(pvData, hr, E_OUTOFMEMORY, "Failed to allocate buffer to convert string block."); | 329 | ReswExitOnNull(pvData, hr, E_OUTOFMEMORY, "Failed to allocate buffer to convert string block."); |
| 315 | 330 | ||
| 316 | pwz = static_cast<LPWSTR>(pvData); | 331 | pwz = static_cast<LPWSTR>(pvData); |
| 317 | for (DWORD i = 0; i < RES_STRINGS_PER_BLOCK; ++i) | 332 | for (DWORD i = 0; i < RES_STRINGS_PER_BLOCK; ++i) |
| @@ -355,10 +370,10 @@ static HRESULT StringBlockConvertFromResourceData( | |||
| 355 | ++pwzParse; | 370 | ++pwzParse; |
| 356 | 371 | ||
| 357 | pStrBlock->rgwz[i] = static_cast<LPWSTR>(MemAlloc((cchParse + 1) * sizeof(WCHAR), TRUE)); | 372 | pStrBlock->rgwz[i] = static_cast<LPWSTR>(MemAlloc((cchParse + 1) * sizeof(WCHAR), TRUE)); |
| 358 | ExitOnNull(pStrBlock->rgwz[i], hr, E_OUTOFMEMORY, "Failed to populate pStrBlock."); | 373 | ReswExitOnNull(pStrBlock->rgwz[i], hr, E_OUTOFMEMORY, "Failed to populate pStrBlock."); |
| 359 | 374 | ||
| 360 | hr = ::StringCchCopyNExW(pStrBlock->rgwz[i], cchParse + 1, pwzParse, cchParse, NULL, NULL, STRSAFE_FILL_BEHIND_NULL); | 375 | hr = ::StringCchCopyNExW(pStrBlock->rgwz[i], cchParse + 1, pwzParse, cchParse, NULL, NULL, STRSAFE_FILL_BEHIND_NULL); |
| 361 | ExitOnFailure(hr, "Failed to copy parsed resource data into string block."); | 376 | ReswExitOnFailure(hr, "Failed to copy parsed resource data into string block."); |
| 362 | 377 | ||
| 363 | pwzParse += cchParse; | 378 | pwzParse += cchParse; |
| 364 | } | 379 | } |
