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?rev... ============================================================================== --- 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=3123... ============================================================================== --- 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(); +}