Author: mjansen Date: Fri Jul 28 19:00:27 2017 New Revision: 75432
URL: http://svn.reactos.org/svn/reactos?rev=75432&view=rev Log: [APPHELP] Various cleanup tasks - Move debug heap functionality to a separate file - Clean includes - Remove msvcrt dependency - Clean up string usage - Remove some higher level functions in favor of their ntdll counterparts (wip).
Added: trunk/reactos/dll/appcompat/apphelp/dbgheap.c (with props) Modified: trunk/reactos/dll/appcompat/apphelp/CMakeLists.txt trunk/reactos/dll/appcompat/apphelp/hsdb.c trunk/reactos/dll/appcompat/apphelp/layer.c trunk/reactos/dll/appcompat/apphelp/sdbapi.c trunk/reactos/dll/appcompat/apphelp/sdbfileattr.c trunk/reactos/dll/appcompat/apphelp/sdbread.c trunk/reactos/dll/appcompat/apphelp/sdbwrite.c
Modified: trunk/reactos/dll/appcompat/apphelp/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/CMake... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/CMakeLists.txt [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -9,6 +9,7 @@
list(APPEND SOURCE apphelp.c + dbgheap.c hsdb.c layer.c sdbapi.c @@ -26,8 +27,7 @@ apphelp.rc ${CMAKE_CURRENT_BINARY_DIR}/apphelp.def)
-set_module_type(apphelp win32dll) -target_link_libraries(apphelp wine) +set_module_type(apphelp win32dll UNICODE ENTRYPOINT DllMain 12) add_delay_importlibs(apphelp version) -add_importlibs(apphelp msvcrt kernel32 ntdll) +add_importlibs(apphelp kernel32 ntdll) add_cd_file(TARGET apphelp DESTINATION reactos/system32 FOR all)
Added: trunk/reactos/dll/appcompat/apphelp/dbgheap.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/dbghe... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/dbgheap.c (added) +++ trunk/reactos/dll/appcompat/apphelp/dbgheap.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -0,0 +1,177 @@ +/* + * Copyright 2017 Mark Jansen (mark.jansen@reactos.org) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define WIN32_NO_STATUS +#include "ntndk.h" + + +#if SDBAPI_DEBUG_ALLOC + +#define TRACE_ALL_FREE_CALLS 1 + +typedef struct SHIM_ALLOC_ENTRY +{ + PVOID Address; + SIZE_T Size; + int Line; + const char* File; + PVOID Next; + PVOID Prev; +} SHIM_ALLOC_ENTRY, *PSHIM_ALLOC_ENTRY; + +static RTL_CRITICAL_SECTION g_SdbpAllocationLock; +static RTL_AVL_TABLE g_SdbpAllocationTable; +static HANDLE g_PrivAllocationHeap; + +static RTL_GENERIC_COMPARE_RESULTS +NTAPI ShimAllocCompareRoutine(_In_ PRTL_AVL_TABLE Table, _In_ PVOID FirstStruct, _In_ PVOID SecondStruct) +{ + PVOID First = ((PSHIM_ALLOC_ENTRY)FirstStruct)->Address; + PVOID Second = ((PSHIM_ALLOC_ENTRY)SecondStruct)->Address; + + if (First < Second) + return GenericLessThan; + else if (First == Second) + return GenericEqual; + return GenericGreaterThan; +} + +static PVOID NTAPI ShimAllocAllocateRoutine(_In_ PRTL_AVL_TABLE Table, _In_ CLONG ByteSize) +{ + return RtlAllocateHeap(g_PrivAllocationHeap, HEAP_ZERO_MEMORY, ByteSize); +} + +static VOID NTAPI ShimAllocFreeRoutine(_In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer) +{ + RtlFreeHeap(g_PrivAllocationHeap, 0, Buffer); +} + +void SdbpInsertAllocation(PVOID address, SIZE_T size, int line, const char* file) +{ + SHIM_ALLOC_ENTRY Entry = {0}; + + Entry.Address = address; + Entry.Size = size; + Entry.Line = line; + Entry.File = file; + + RtlEnterCriticalSection(&g_SdbpAllocationLock); + RtlInsertElementGenericTableAvl(&g_SdbpAllocationTable, &Entry, sizeof(Entry), NULL); + RtlLeaveCriticalSection(&g_SdbpAllocationLock); +} + +void SdbpUpdateAllocation(PVOID address, PVOID newaddress, SIZE_T size, int line, const char* file) +{ + SHIM_ALLOC_ENTRY Lookup = {0}; + PSHIM_ALLOC_ENTRY Entry; + Lookup.Address = address; + + RtlEnterCriticalSection(&g_SdbpAllocationLock); + Entry = RtlLookupElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup); + + if (address == newaddress) + { + Entry->Size = size; + } + else + { + Lookup.Address = newaddress; + Lookup.Size = size; + Lookup.Line = line; + Lookup.File = file; + Lookup.Prev = address; + RtlInsertElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup, sizeof(Lookup), NULL); + Entry->Next = newaddress; + } + RtlLeaveCriticalSection(&g_SdbpAllocationLock); +} + +static void SdbpPrintSingleAllocation(PSHIM_ALLOC_ENTRY Entry) +{ + DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Entry->File, Entry->Line, + Entry->Next ? "Invalidated " : "", Entry->Prev ? "Re" : "", Entry->Size, Entry->Address); + +} + +void SdbpRemoveAllocation(PVOID address, int line, const char* file) +{ + SHIM_ALLOC_ENTRY Lookup = {0}; + PSHIM_ALLOC_ENTRY Entry; + +#if TRACE_ALL_FREE_CALLS + DbgPrint("\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line); +#endif + + Lookup.Address = address; + RtlEnterCriticalSection(&g_SdbpAllocationLock); + while (Lookup.Address) + { + Entry = RtlLookupElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup); + if (Entry) + { + Lookup = *Entry; + RtlDeleteElementGenericTableAvl(&g_SdbpAllocationTable, Entry); + +#if TRACE_ALL_FREE_CALLS + SdbpPrintSingleAllocation(&Lookup); +#endif + Lookup.Address = Lookup.Prev; + } + else + { + Lookup.Address = NULL; + } + } + RtlLeaveCriticalSection(&g_SdbpAllocationLock); +#if TRACE_ALL_FREE_CALLS + DbgPrint("===============\r\n"); +#endif +} + +void SdbpDebugHeapInit(HANDLE privateHeapPtr) +{ + g_PrivAllocationHeap = privateHeapPtr; + + RtlInitializeCriticalSection(&g_SdbpAllocationLock); + RtlInitializeGenericTableAvl(&g_SdbpAllocationTable, ShimAllocCompareRoutine, + ShimAllocAllocateRoutine, ShimAllocFreeRoutine, NULL); +} + +void SdbpDebugHeapDeinit(void) +{ + if (g_SdbpAllocationTable.NumberGenericTableElements != 0) + { + PSHIM_ALLOC_ENTRY Entry; + + DbgPrint("\r\n===============\r\n===============\r\nSdbpHeapDeinit: Dumping leaks\r\n"); + RtlEnterCriticalSection(&g_SdbpAllocationLock); + Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, TRUE); + + while (Entry) + { + SdbpPrintSingleAllocation(Entry); + Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, FALSE); + } + RtlLeaveCriticalSection(&g_SdbpAllocationLock); + DbgPrint("===============\r\n===============\r\n"); + } + /*__debugbreak();*/ + /*RtlDeleteCriticalSection(&g_SdbpAllocationLock);*/ +} + +#endif
Propchange: trunk/reactos/dll/appcompat/apphelp/dbgheap.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/appcompat/apphelp/hsdb.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/hsdb.... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/hsdb.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/hsdb.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav BlaževiÄ - * Copyright 2015-2017 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,7 +24,6 @@ #include "strsafe.h" #include "apphelp.h"
-#include "wine/unicode.h"
#define MAX_LAYER_LENGTH 256 #define GPLK_USER 1 @@ -385,8 +384,8 @@ SdbReleaseDatabase(hsdb); return NULL; } - SdbGetAppPatchDir(NULL, buffer, 128); - memcpy(buffer + lstrlenW(buffer), name, SdbpStrsize(name)); + SdbGetAppPatchDir(NULL, buffer, _countof(buffer)); + StringCchCatW(buffer, _countof(buffer), name); flags = HID_DOS_PATHS; }
@@ -481,7 +480,7 @@
/* Extract file name */ - file_name = strrchrW(DosApplicationName.String.Buffer, '\'); + file_name = wcsrchr(DosApplicationName.String.Buffer, '\'); if (!file_name) { SHIM_ERR("Failed to find Exe name in %wZ.", &DosApplicationName.String); @@ -578,7 +577,7 @@ if (!default_dir) { WCHAR* tmp; - UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW(szAppPatch); + UINT len = GetSystemWindowsDirectoryW(NULL, 0) + SdbpStrlen(szAppPatch); tmp = SdbAlloc((len + 1)* sizeof(WCHAR)); if (tmp) {
Modified: trunk/reactos/dll/appcompat/apphelp/layer.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/layer... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/layer.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/layer.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -1,5 +1,5 @@ /* - * Copyright 2015 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -159,7 +159,7 @@ FindClose(FindHandle); SdbpResizeTempStr(LongPath, (LongPath->Str.Length >> 1) + 20); StringCbPrintfW(LongPath->Str.Buffer, LongPath->Str.MaximumLength, SIGN_MEDIA_FMT, SignMedia, Scratch.Str.Buffer + 3); - LongPath->Str.Length = (USHORT)wcslen(LongPath->Str.Buffer) * sizeof(WCHAR); + LongPath->Str.Length = (USHORT)SdbpStrlen(LongPath->Str.Buffer) * sizeof(WCHAR); SdbpFreeTempStr(&Scratch); return TRUE; } @@ -217,7 +217,7 @@ return Status; } } - FullPath->MaximumLength = (USHORT)(BasePath.Length + (wcslen(LayersKey) + 1) * sizeof(WCHAR)); + FullPath->MaximumLength = (USHORT)(BasePath.Length + SdbpStrsize(LayersKey)); FullPath->Buffer = SdbAlloc(FullPath->MaximumLength); FullPath->Length = 0; RtlAppendUnicodeStringToString(FullPath, &BasePath); @@ -447,7 +447,7 @@ Status = SdbpOpenKey(&FullKey, bMachine, KEY_SET_VALUE, &KeyHandle); if (NT_SUCCESS(Status)) { - Status = NtSetValueKey(KeyHandle, &LongPath.Str, 0, REG_SZ, (PVOID)wszLayers, (wcslen(wszLayers)+1) * sizeof(WCHAR)); + Status = NtSetValueKey(KeyHandle, &LongPath.Str, 0, REG_SZ, (PVOID)wszLayers, SdbpStrsize(wszLayers)); if (!NT_SUCCESS(Status)) { SHIM_INFO("Failed to write a value to Key "%wZ" Status 0x%lx\n", &FullKey, Status);
Modified: trunk/reactos/dll/appcompat/apphelp/sdbapi.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/sdbap... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/sdbapi.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/sdbapi.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -18,15 +18,11 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#define WIN32_NO_STATUS -#include "windows.h" #include "ntndk.h" #include "strsafe.h" #include "apphelp.h" #include "sdbstringtable.h"
-#include "wine/unicode.h" -
static const GUID GUID_DATABASE_MSI = {0xd8ff6d16,0x6a3a,0x468a, {0x8b,0x44,0x01,0x71,0x4d,0xdc,0x49,0xea}}; static const GUID GUID_DATABASE_SHIM = {0x11111111,0x1111,0x1111, {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}}; @@ -36,139 +32,30 @@
#if SDBAPI_DEBUG_ALLOC
-typedef struct SHIM_ALLOC_ENTRY -{ - PVOID Address; - SIZE_T Size; - int Line; - const char* File; - PVOID Next; - PVOID Prev; -} SHIM_ALLOC_ENTRY, *PSHIM_ALLOC_ENTRY; - -/* FIXME: This is not threadsafe */ -static RTL_AVL_TABLE g_SdbpAllocationTable; - - -static RTL_GENERIC_COMPARE_RESULTS -NTAPI ShimAllocCompareRoutine(_In_ PRTL_AVL_TABLE Table, _In_ PVOID FirstStruct, _In_ PVOID SecondStruct) -{ - PVOID First = ((PSHIM_ALLOC_ENTRY)FirstStruct)->Address; - PVOID Second = ((PSHIM_ALLOC_ENTRY)SecondStruct)->Address; - - if (First < Second) - return GenericLessThan; - else if (First == Second) - return GenericEqual; - return GenericGreaterThan; -} - -static PVOID NTAPI ShimAllocAllocateRoutine(_In_ PRTL_AVL_TABLE Table, _In_ CLONG ByteSize) -{ - return HeapAlloc(SdbpHeap(), HEAP_ZERO_MEMORY, ByteSize); -} - -static VOID NTAPI ShimAllocFreeRoutine(_In_ PRTL_AVL_TABLE Table, _In_ PVOID Buffer) -{ - HeapFree(SdbpHeap(), 0, Buffer); -} - -static void SdbpInsertAllocation(PVOID address, SIZE_T size, int line, const char* file) -{ - SHIM_ALLOC_ENTRY Entry = {0}; - - Entry.Address = address; - Entry.Size = size; - Entry.Line = line; - Entry.File = file; - RtlInsertElementGenericTableAvl(&g_SdbpAllocationTable, &Entry, sizeof(Entry), NULL); -} - -static void SdbpUpdateAllocation(PVOID address, PVOID newaddress, SIZE_T size, int line, const char* file) -{ - SHIM_ALLOC_ENTRY Lookup = {0}; - PSHIM_ALLOC_ENTRY Entry; - Lookup.Address = address; - Entry = RtlLookupElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup); - - if (address == newaddress) - { - Entry->Size = size; - } - else - { - Lookup.Address = newaddress; - Lookup.Size = size; - Lookup.Line = line; - Lookup.File = file; - Lookup.Prev = address; - RtlInsertElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup, sizeof(Lookup), NULL); - Entry->Next = newaddress; - } -} - -static void SdbpRemoveAllocation(PVOID address, int line, const char* file) -{ - SHIM_ALLOC_ENTRY Lookup = {0}; - PSHIM_ALLOC_ENTRY Entry; - - DbgPrint("\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line); - - Lookup.Address = address; - while (Lookup.Address) - { - Entry = RtlLookupElementGenericTableAvl(&g_SdbpAllocationTable, &Lookup); - if (Entry) - { - Lookup = *Entry; - RtlDeleteElementGenericTableAvl(&g_SdbpAllocationTable, Entry); - - DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Lookup.File, Lookup.Line, - Lookup.Next ? "Invalidated " : "", Lookup.Prev ? "Re" : "", Lookup.Size, Lookup.Address); - Lookup.Address = Lookup.Prev; - } - else - { - Lookup.Address = NULL; - } - } - DbgPrint("===============\r\n"); -} +/* dbgheap.c */ +void SdbpInsertAllocation(PVOID address, SIZE_T size, int line, const char* file); +void SdbpUpdateAllocation(PVOID address, PVOID newaddress, SIZE_T size, int line, const char* file); +void SdbpRemoveAllocation(PVOID address, int line, const char* file); +void SdbpDebugHeapInit(HANDLE privateHeapPtr); +void SdbpDebugHeapDeinit(void);
#endif
static HANDLE g_Heap; void SdbpHeapInit(void) { -#if SDBAPI_DEBUG_ALLOC - RtlInitializeGenericTableAvl(&g_SdbpAllocationTable, ShimAllocCompareRoutine, - ShimAllocAllocateRoutine, ShimAllocFreeRoutine, NULL); -#endif - g_Heap = HeapCreate(0, 0x10000, 0); + g_Heap = RtlCreateHeap(HEAP_GROWABLE, NULL, 0, 0x10000, NULL, NULL); +#if SDBAPI_DEBUG_ALLOC + SdbpDebugHeapInit(g_Heap); +#endif }
void SdbpHeapDeinit(void) { #if SDBAPI_DEBUG_ALLOC - if (g_SdbpAllocationTable.NumberGenericTableElements != 0) - { - PSHIM_ALLOC_ENTRY Entry; - - DbgPrint("\r\n===============\r\n===============\r\nSdbpHeapDeinit: Dumping leaks\r\n"); - Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, TRUE); - - while (Entry) - { - DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Entry->File, Entry->Line, - Entry->Next ? "Invalidated " : "", Entry->Prev ? "Re" : "", Entry->Size, Entry->Address); - - Entry = RtlEnumerateGenericTableAvl(&g_SdbpAllocationTable, FALSE); - } - DbgPrint("===============\r\n===============\r\n"); - } - /*__debugbreak();*/ -#endif - HeapDestroy(g_Heap); + SdbpDebugHeapDeinit(); +#endif + RtlDestroyHeap(g_Heap); }
static HANDLE SdbpHeap(void) @@ -182,7 +69,7 @@ #endif ) { - LPVOID mem = HeapAlloc(SdbpHeap(), HEAP_ZERO_MEMORY, size); + LPVOID mem = RtlAllocateHeap(SdbpHeap(), HEAP_ZERO_MEMORY, size); #if SDBAPI_DEBUG_ALLOC SdbpInsertAllocation(mem, size, line, file); #endif @@ -195,7 +82,7 @@ #endif ) { - LPVOID newmem = HeapReAlloc(SdbpHeap(), HEAP_ZERO_MEMORY, mem, size); + LPVOID newmem = RtlReAllocateHeap(SdbpHeap(), HEAP_ZERO_MEMORY, mem, size); #if SDBAPI_DEBUG_ALLOC SdbpUpdateAllocation(mem, newmem, size, line, file); #endif @@ -211,7 +98,7 @@ #if SDBAPI_DEBUG_ALLOC SdbpRemoveAllocation(mem, line, file); #endif - HeapFree(SdbpHeap(), 0, mem); + RtlFreeHeap(SdbpHeap(), 0, mem); }
PDB WINAPI SdbpCreate(LPCWSTR path, PATH_TYPE type, BOOL write) @@ -228,7 +115,9 @@ return NULL; } else + { RtlInitUnicodeString(&str, path); + }
/* SdbAlloc zeroes the memory. */ db = (PDB)SdbAlloc(sizeof(DB)); @@ -268,7 +157,7 @@
DWORD SdbpStrlen(PCWSTR string) { - return lstrlenW(string); + return wcslen(string); }
DWORD SdbpStrsize(PCWSTR string) @@ -279,7 +168,7 @@ PWSTR SdbpStrDup(LPCWSTR string) { PWSTR ret = SdbAlloc(SdbpStrsize(string)); - lstrcpyW(ret, string); + wcscpy(ret, string); return ret; }
@@ -379,6 +268,7 @@ PDB SdbpOpenDatabase(LPCWSTR path, PATH_TYPE type, PDWORD major, PDWORD minor) { IO_STATUS_BLOCK io; + FILE_STANDARD_INFORMATION fsi; PDB db; NTSTATUS Status; BYTE header[12]; @@ -387,7 +277,15 @@ if (!db) return NULL;
- db->size = GetFileSize(db->file, NULL); + Status = NtQueryInformationFile(db->file, &io, &fsi, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation); + if (!NT_SUCCESS(Status)) + { + SdbCloseDatabase(db); + SHIM_ERR("Failed to get shim database size: 0x%lx\n", Status); + return NULL; + } + + db->size = fsi.EndOfFile.u.LowPart; db->data = SdbAlloc(db->size); Status = NtReadFile(db->file, NULL, NULL, NULL, &io, db->data, db->size, NULL, NULL);
@@ -597,7 +495,7 @@ if (tmp != TAGID_NULL) { LPCWSTR name = SdbGetStringTagPtr(db, tmp); - if (name && !lstrcmpiW(name, find_name)) + if (name && !wcsicmp(name, find_name)) return iter; } iter = SdbFindNextTag(db, root, iter);
Modified: trunk/reactos/dll/appcompat/apphelp/sdbfileattr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/sdbfi... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/sdbfileattr.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/sdbfileattr.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -20,13 +20,11 @@
#define WIN32_NO_STATUS #include "windef.h" -#include "winbase.h" #include "apphelp.h" -#include "imagehlp.h" +#include "strsafe.h" #include "winver.h" #include "rtlfuncs.h"
-#include "wine/unicode.h"
#define NUM_ATTRIBUTES 28 enum APPHELP_MODULETYPE @@ -79,7 +77,7 @@ if (!file_info) return NULL;
- snprintfW(value, 128, translation, attr); + StringCchPrintfW(value, ARRAYSIZE(value), translation, attr); if (VerQueryValueW(file_info, value, &buffer, &size) && size != 0) return (WCHAR*)buffer;
@@ -309,7 +307,7 @@ file_info = SdbAlloc(info_size); GetFileVersionInfoW(path, 0, info_size, file_info); VerQueryValueW(file_info, str_tinfo, (LPVOID)&lang_page, &page_size); - snprintfW(translation, 128, str_trans, lang_page->language, lang_page->code_page); + StringCchPrintfW(translation, ARRAYSIZE(translation), str_trans, lang_page->language, lang_page->code_page); }
/* Handles 2, 3, 12, 13, 14, 15, 21, 22 */
Modified: trunk/reactos/dll/appcompat/apphelp/sdbread.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/sdbre... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/sdbread.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/sdbread.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -1,7 +1,7 @@ /* * Copyright 2011 André Hentschel * Copyright 2013 Mislav Blaevic - * Copyright 2015,2016 Mark Jansen + * Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,10 +19,7 @@ */
#include "windef.h" -#include "winbase.h" #include "apphelp.h" - -#include "wine/unicode.h"
DWORD WINAPI SdbGetTagDataSize(PDB db, TAGID tagid);
Modified: trunk/reactos/dll/appcompat/apphelp/sdbwrite.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/appcompat/apphelp/sdbwr... ============================================================================== --- trunk/reactos/dll/appcompat/apphelp/sdbwrite.c [iso-8859-1] (original) +++ trunk/reactos/dll/appcompat/apphelp/sdbwrite.c [iso-8859-1] Fri Jul 28 19:00:27 2017 @@ -20,7 +20,7 @@
#if !defined(SDBWRITE_HOSTTOOL) #define WIN32_NO_STATUS -#include "windows.h" +#include "windef.h" #include "ntndk.h" #else #include <typedefs.h>