Author: fireball
Date: Sat Dec 15 13:02:00 2007
New Revision: 31232
URL:
http://svn.reactos.org/svn/reactos?rev=31232&view=rev
Log:
- Colin Finck: Replace broken memcmp comparison of wide strings by an own version of
wcsncmp (due to the fact it may be different on different hosts).
- 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.
Modified:
trunk/reactos/tools/mkhive/registry.c
trunk/reactos/tools/mkhive/rtl.c
Modified: trunk/reactos/tools/mkhive/registry.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/registry.c?re…
==============================================================================
--- trunk/reactos/tools/mkhive/registry.c (original)
+++ trunk/reactos/tools/mkhive/registry.c Sat Dec 15 13:02:00 2007
@@ -68,6 +68,8 @@
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 @@
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");
Modified: trunk/reactos/tools/mkhive/rtl.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/mkhive/rtl.c?rev=312…
==============================================================================
--- trunk/reactos/tools/mkhive/rtl.c (original)
+++ trunk/reactos/tools/mkhive/rtl.c Sat Dec 15 13:02:00 2007
@@ -26,6 +26,23 @@
if( String[i] ) return &String[i];
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;
}
/*
@@ -168,4 +185,32 @@
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();
+}