- Colin Finck: Replace broken memcmp comparison of wide strings by an own version...
authorAleksey Bragin <aleksey@reactos.org>
Sat, 15 Dec 2007 10:02:00 +0000 (10:02 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Sat, 15 Dec 2007 10:02:00 +0000 (10:02 +0000)
- Add RtlAssert to mkhive, it was missing in some compiling cases, and fix DbgPrint function implementation.
- Mark a memory overwrite in mkhive with a FIXME, to be fixed later.

svn path=/trunk/; revision=31232

reactos/tools/mkhive/registry.c
reactos/tools/mkhive/rtl.c

index 29de8c9..4b1492c 100644 (file)
@@ -68,6 +68,8 @@ CreateInMemoryStructure(
        Key->ValueCount = 0;
 
        Key->NameSize = KeyName->Length;
+       /* FIXME: It's not enough to allocate this way, because later
+                 this memory gets overwritten with bigger names */
        Key->Name = malloc (Key->NameSize);
        if (!Key->Name)
                return NULL;
@@ -136,7 +138,7 @@ RegpOpenOrCreateKey(
                        RtlInitUnicodeString(&KeyString, LocalKeyName);
 
                /* Redirect from 'CurrentControlSet' to 'ControlSet001' */
-               if (!memcmp(LocalKeyName, L"CurrentControlSet", 34) &&
+               if (!xwcsncmp(LocalKeyName, L"CurrentControlSet", 17) &&
                     ParentKey->NameSize == 12 &&
                     !memcmp(ParentKey->Name, L"SYSTEM", 12))
                        RtlInitUnicodeString(&KeyString, L"ControlSet001");
index 24c22f1..1ccb8ac 100644 (file)
@@ -28,6 +28,23 @@ PWSTR xwcschr( PWSTR String, WCHAR Char )
        else return NULL;
 }
 
+int xwcsncmp(PCWSTR s1, PCWSTR s2, size_t n)
+{
+    while(n--)
+    {
+        if(*s1 != *s2)
+            return 1;
+
+        if(*s1 == 0)
+            return 0;
+
+        s1++;
+        s2++;
+    }
+
+    return 0;
+}
+
 /*
  * @implemented
  *
@@ -168,4 +185,32 @@ DbgPrint(
     va_start(ap, Format);
     vprintf(Format, ap);
     va_end(ap);
+
+    return 0;
+}
+
+VOID
+NTAPI
+RtlAssert(PVOID FailedAssertion,
+          PVOID FileName,
+          ULONG LineNumber,
+          PCHAR Message)
+{
+   if (NULL != Message)
+   {
+      DbgPrint("Assertion \'%s\' failed at %s line %d: %s\n",
+               (PCHAR)FailedAssertion,
+               (PCHAR)FileName,
+               LineNumber,
+               Message);
+   }
+   else
+   {
+      DbgPrint("Assertion \'%s\' failed at %s line %d\n",
+               (PCHAR)FailedAssertion,
+               (PCHAR)FileName,
+               LineNumber);
+   }
+
+   //DbgBreakPoint();
 }