[ros-diffs] [sginsberg] 35520: - Patch by Alex Ionescu: Fix a typo, and code cleanup

sginsberg at svn.reactos.org sginsberg at svn.reactos.org
Fri Aug 22 00:41:18 CEST 2008


Author: sginsberg
Date: Thu Aug 21 17:41:17 2008
New Revision: 35520

URL: http://svn.reactos.org/svn/reactos?rev=35520&view=rev
Log:
- Patch by Alex Ionescu: Fix a typo, and code cleanup

Modified:
    trunk/reactos/lib/rtl/debug.c

Modified: trunk/reactos/lib/rtl/debug.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/debug.c?rev=35520&r1=35519&r2=35520&view=diff
==============================================================================
--- trunk/reactos/lib/rtl/debug.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/debug.c [iso-8859-1] Thu Aug 21 17:41:17 2008
@@ -54,51 +54,46 @@
                               IN va_list ap,
                               IN BOOLEAN HandleBreakpoint)
 {
-    NTSTATUS Status;
+    NTSTATUS Status = STATUS_SUCCESS;
     ANSI_STRING DebugString;
     CHAR Buffer[512];
-    PCHAR pBuffer = Buffer;
-    ULONG pBufferSize = sizeof(Buffer);
-    ULONG Length;
+    ULONG Length, PrefixLength;
     EXCEPTION_RECORD ExceptionRecord;
 
     /* Check if we should print it or not */
-    if (ComponentId != -1 && !NtQueryDebugFilterState(ComponentId, Level))
+    if ((ComponentId != -1) && !(NtQueryDebugFilterState(ComponentId, Level)))
     {
         /* This message is masked */
-        return STATUS_SUCCESS;
+        return Status;
     }
 
     /* For user mode, don't recursively DbgPrint */
-    if (RtlpSetInDbgPrint(TRUE)) return STATUS_SUCCESS;
-
-    /* Initialize the length to 8 */
-    DebugString.Length = 0;
-
-    /* Handle the prefix */
-    if (Prefix && *Prefix)
-    {
-        /* Get the length */
-        DebugString.Length = strlen(Prefix);
-
-        /* Normalize it */
-        if(DebugString.Length > sizeof(Buffer))
-        {
-            DebugString.Length = sizeof(Buffer);
-        }
+    if (RtlpSetInDbgPrint(TRUE)) return Status;
+
+    /* Guard against incorrect pointers */
+    _SEH_TRY
+    {
+        /* Get the length and normalize it */
+        PrefixLength = strlen(Prefix);
+        if (PrefixLength > sizeof(Buffer)) PrefixLength = sizeof(Buffer);
 
         /* Copy it */
-        strncpy(Buffer, Prefix, DebugString.Length);
-
-        /* Set the pointer and update the size */
-        pBuffer = &Buffer[DebugString.Length];
-        pBufferSize -= DebugString.Length;
-    }
-
-    /* Setup the ANSI String */
-    DebugString.Buffer = Buffer;
-    DebugString.MaximumLength = sizeof(Buffer);
-    Length = _vsnprintf(pBuffer, pBufferSize, Format, ap);
+        strncpy(Buffer, Prefix, PrefixLength);
+        
+        /* Do the printf */
+        Length = _vsnprintf(Buffer + PrefixLength,
+                            sizeof(Buffer) - PrefixLength,
+                            Format,
+                            ap);
+    }
+    _SEH_HANDLE
+    {
+        /* Fail */
+        Length = PrefixLength = 0;
+        Status = _SEH_GetExceptionCode();
+    }
+    _SEH_END;
+    if (!NT_SUCCESS(Status)) return Status;
 
     /* Check if we went past the buffer */
     if (Length == -1)
@@ -109,9 +104,15 @@
         /* Put maximum */
         Length = sizeof(Buffer);
     }
-
-    /* Update length */
-    DebugString.Length += (USHORT)Length;
+    else
+    {
+        /* Add the prefix */
+        Length += PrefixLength;
+    }
+    
+    /* Build the string */
+    DebugString.Length = Length;
+    DebugString.Buffer = Buffer;
 
     /* First, let the debugger know as well */
     if (RtlpCheckForActiveDebugger(FALSE))



More information about the Ros-diffs mailing list