[APPHELP] Use DbgPrint instead of OutputDebugString + fix SDBAPI_DEBUG_ALLOC
authorMark Jansen <mark.jansen@reactos.org>
Thu, 27 Jul 2017 20:36:51 +0000 (20:36 +0000)
committerMark Jansen <mark.jansen@reactos.org>
Thu, 27 Jul 2017 20:36:51 +0000 (20:36 +0000)
svn path=/trunk/; revision=75429

reactos/dll/appcompat/apphelp/CMakeLists.txt
reactos/dll/appcompat/apphelp/apphelp.c
reactos/dll/appcompat/apphelp/sdbapi.c
reactos/dll/appcompat/apphelp/sdbfileattr.c
reactos/dll/appcompat/apphelp/sdbwrite.c

index 5caed2e..0573391 100644 (file)
@@ -3,6 +3,7 @@ include_directories(${SHIMLIB_DIR})
 
 remove_definitions(-D_WIN32_WINNT=0x502 -DWINVER=0x502)
 add_definitions(-D_WIN32_WINNT=0x601 -DWINVER=0x601)
+#add_definitions(-DSDBAPI_DEBUG_ALLOC)
 
 spec2def(apphelp.dll apphelp.spec ADD_IMPORTLIB)
 
index 90bc9fd..bcc14da 100644 (file)
@@ -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
@@ -152,7 +152,7 @@ BOOL WINAPIV ShimDbgPrint(SHIM_LOG_LEVEL Level, PCSTR FunctionName, PCSTR Format
 #if defined(APPCOMPAT_USE_DBGPRINTEX) && APPCOMPAT_USE_DBGPRINTEX
     return NT_SUCCESS(DbgPrintEx(DPFLTR_APPCOMPAT_ID, Level, "%s", Buffer));
 #else
-    OutputDebugStringA(Buffer);
+    DbgPrint("%s", Buffer);
     return TRUE;
 #endif
 }
index 9f58b49..036f0f9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2011 André Hentschel
  * Copyright 2013 Mislav Blažević
- * 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
@@ -46,7 +46,7 @@ typedef struct SHIM_ALLOC_ENTRY
     PVOID Prev;
 } SHIM_ALLOC_ENTRY, *PSHIM_ALLOC_ENTRY;
 
-
+/* FIXME: This is not threadsafe */
 static RTL_AVL_TABLE g_SdbpAllocationTable;
 
 
@@ -109,12 +109,10 @@ static void SdbpUpdateAllocation(PVOID address, PVOID newaddress, SIZE_T size, i
 
 static void SdbpRemoveAllocation(PVOID address, int line, const char* file)
 {
-    char buf[512];
     SHIM_ALLOC_ENTRY Lookup = {0};
     PSHIM_ALLOC_ENTRY Entry;
 
-    sprintf(buf, "\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line);
-    OutputDebugStringA(buf);
+    DbgPrint("\r\n===============\r\n%s(%d): SdbpFree called, tracing alloc:\r\n", file, line);
 
     Lookup.Address = address;
     while (Lookup.Address)
@@ -125,9 +123,8 @@ static void SdbpRemoveAllocation(PVOID address, int line, const char* file)
             Lookup = *Entry;
             RtlDeleteElementGenericTableAvl(&g_SdbpAllocationTable, Entry);
 
-            sprintf(buf, " > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Lookup.File, Lookup.Line,
+            DbgPrint(" > %s(%d): %s%sAlloc( %d ) ==> %p\r\n", Lookup.File, Lookup.Line,
                 Lookup.Next ? "Invalidated " : "", Lookup.Prev ? "Re" : "", Lookup.Size, Lookup.Address);
-            OutputDebugStringA(buf);
             Lookup.Address = Lookup.Prev;
         }
         else
@@ -135,8 +132,7 @@ static void SdbpRemoveAllocation(PVOID address, int line, const char* file)
             Lookup.Address = NULL;
         }
     }
-    sprintf(buf, "\r\n===============\r\n");
-    OutputDebugStringA(buf);
+    DbgPrint("===============\r\n");
 }
 
 #endif
@@ -155,7 +151,22 @@ void SdbpHeapDeinit(void)
 {
 #if SDBAPI_DEBUG_ALLOC
     if (g_SdbpAllocationTable.NumberGenericTableElements != 0)
-        __debugbreak();
+    {
+        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);
 }
@@ -267,7 +278,7 @@ DWORD SdbpStrsize(PCWSTR string)
 
 PWSTR SdbpStrDup(LPCWSTR string)
 {
-    PWSTR ret = SdbpAlloc(SdbpStrsize(string));
+    PWSTR ret = SdbAlloc(SdbpStrsize(string));
     lstrcpyW(ret, string);
     return ret;
 }
index 2032e11..3ac6760 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2011 André Hentschel
  * Copyright 2013 Mislav Bla\9eevic
- * 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
@@ -97,7 +97,7 @@ static void WINAPI SdbpSetStringAttrFromAnsiString(PATTRINFO attr, TAG tag, PBYT
 
     attr->type = tag;
     attr->flags = ATTRIBUTE_AVAILABLE;
-    dest = attr->lpattr = SdbpAlloc((len+1) * sizeof(WCHAR));
+    dest = attr->lpattr = SdbAlloc((len+1) * sizeof(WCHAR));
     while (len--)
         *(dest++) = *(string++);
     *dest = 0;
index 1ee1b0a..1f68c2f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2011 André Hentschel
  * Copyright 2013 Mislav Blažević
- * 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
@@ -62,7 +62,7 @@ static BOOL WINAPI SdbpGetOrAddStringRef(PDB db, LPCWSTR string, TAGID* tagid)
     PDB buf = db->string_buffer;
     if (db->string_buffer == NULL)
     {
-        db->string_buffer = buf = SdbpAlloc(sizeof(DB));
+        db->string_buffer = buf = SdbAlloc(sizeof(DB));
         if (buf == NULL)
             return FALSE;
         buf->size = 128;