diff --git a/reactos/tools/mkhive/registry.c b/reactos/tools/mkhive/registry.c index 29de8c90f99..4b1492c9763 100644 --- a/reactos/tools/mkhive/registry.c +++ b/reactos/tools/mkhive/registry.c @@ -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"); diff --git a/reactos/tools/mkhive/rtl.c b/reactos/tools/mkhive/rtl.c index 24c22f1c04e..1ccb8ac4e0a 100644 --- a/reactos/tools/mkhive/rtl.c +++ b/reactos/tools/mkhive/rtl.c @@ -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(); }