Author: hbelusca Date: Sun May 21 23:48:09 2017 New Revision: 74620
URL: http://svn.reactos.org/svn/reactos?rev=74620&view=rev Log: [USETUP]: inicache module: From the existing IniCacheLoad() function, introduce a IniCacheLoadFromMemory() function that just does the same (initialize an INI file cache and parse the INI file), but takes the input from a memory buffer. Then, rewrite the IniCacheLoad() function to just open the file given in input, and then fall back to calling IniCacheLoadFromMemory. The IniCacheLoadFromMemory() function will be used later.
Modified: branches/setup_improvements/base/setup/usetup/inicache.c branches/setup_improvements/base/setup/usetup/inicache.h
Modified: branches/setup_improvements/base/setup/usetup/inicache.c URL: http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/us... ============================================================================== --- branches/setup_improvements/base/setup/usetup/inicache.c [iso-8859-1] (original) +++ branches/setup_improvements/base/setup/usetup/inicache.c [iso-8859-1] Sun May 21 23:48:09 2017 @@ -467,6 +467,101 @@ /* PUBLIC FUNCTIONS *********************************************************/
NTSTATUS +IniCacheLoadFromMemory( + PINICACHE *Cache, + PCHAR FileBuffer, + ULONG FileLength, + BOOLEAN String) +{ + PCHAR Ptr; + + PINICACHESECTION Section; + PINICACHEKEY Key; + + PCHAR SectionName; + ULONG SectionNameSize; + + PCHAR KeyName; + ULONG KeyNameSize; + + PCHAR KeyValue; + ULONG KeyValueSize; + + /* Allocate inicache header */ + *Cache = (PINICACHE)RtlAllocateHeap(ProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(INICACHE)); + if (*Cache == NULL) + { + DPRINT("RtlAllocateHeap() failed\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Parse ini file */ + Section = NULL; + Ptr = FileBuffer; + while (Ptr != NULL && *Ptr != 0) + { + Ptr = IniCacheSkipWhitespace(Ptr); + if (Ptr == NULL) + continue; + + if (*Ptr == '[') + { + Section = NULL; + Ptr++; + + Ptr = IniCacheGetSectionName(Ptr, + &SectionName, + &SectionNameSize); + + DPRINT1("[%.*s]\n", SectionNameSize, SectionName); + + Section = IniCacheAddSection(*Cache, + SectionName, + SectionNameSize); + if (Section == NULL) + { + DPRINT("IniCacheAddSection() failed\n"); + Ptr = IniCacheSkipToNextSection(Ptr); + continue; + } + } + else + { + if (Section == NULL) + { + Ptr = IniCacheSkipToNextSection(Ptr); + continue; + } + + Ptr = IniCacheGetKeyName(Ptr, + &KeyName, + &KeyNameSize); + + Ptr = IniCacheGetKeyValue(Ptr, + &KeyValue, + &KeyValueSize, + String); + + DPRINT1("'%.*s' = '%.*s'\n", KeyNameSize, KeyName, KeyValueSize, KeyValue); + + Key = IniCacheAddKey(Section, + KeyName, + KeyNameSize, + KeyValue, + KeyValueSize); + if (Key == NULL) + { + DPRINT("IniCacheAddKey() failed\n"); + } + } + } + + return STATUS_SUCCESS; +} + +NTSTATUS IniCacheLoad( PINICACHE *Cache, PWCHAR FileName, @@ -480,20 +575,7 @@ NTSTATUS Status; PCHAR FileBuffer; ULONG FileLength; - PCHAR Ptr; LARGE_INTEGER FileOffset; - - PINICACHESECTION Section; - PINICACHEKEY Key; - - PCHAR SectionName; - ULONG SectionNameSize; - - PCHAR KeyName; - ULONG KeyNameSize; - - PCHAR KeyValue; - ULONG KeyValueSize;
*Cache = NULL;
@@ -568,84 +650,18 @@ if (!NT_SUCCESS(Status)) { DPRINT("NtReadFile() failed (Status %lx)\n", Status); - RtlFreeHeap(ProcessHeap, 0, FileBuffer); - return Status; - } - - /* Allocate inicache header */ - *Cache = (PINICACHE)RtlAllocateHeap(ProcessHeap, - HEAP_ZERO_MEMORY, - sizeof(INICACHE)); - if (*Cache == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - return STATUS_INSUFFICIENT_RESOURCES; - } - - /* Parse ini file */ - Section = NULL; - Ptr = FileBuffer; - while (Ptr != NULL && *Ptr != 0) - { - Ptr = IniCacheSkipWhitespace(Ptr); - if (Ptr == NULL) - continue; - - if (*Ptr == '[') - { - Section = NULL; - Ptr++; - - Ptr = IniCacheGetSectionName(Ptr, - &SectionName, - &SectionNameSize); - - DPRINT1("[%.*s]\n", SectionNameSize, SectionName); - - Section = IniCacheAddSection(*Cache, - SectionName, - SectionNameSize); - if (Section == NULL) - { - DPRINT("IniCacheAddSection() failed\n"); - Ptr = IniCacheSkipToNextSection(Ptr); - continue; - } - } - else - { - if (Section == NULL) - { - Ptr = IniCacheSkipToNextSection(Ptr); - continue; - } - - Ptr = IniCacheGetKeyName(Ptr, - &KeyName, - &KeyNameSize); - - Ptr = IniCacheGetKeyValue(Ptr, - &KeyValue, - &KeyValueSize, - String); - - DPRINT1("'%.*s' = '%.*s'\n", KeyNameSize, KeyName, KeyValueSize, KeyValue); - - Key = IniCacheAddKey(Section, - KeyName, - KeyNameSize, - KeyValue, - KeyValueSize); - if (Key == NULL) - { - DPRINT("IniCacheAddKey() failed\n"); - } - } - } - - /* Free file buffer */ + goto Quit; + } + + Status = IniCacheLoadFromMemory(Cache, FileBuffer, FileLength, String); + if (!NT_SUCCESS(Status)) + { + DPRINT1("IniCacheLoadFromMemory() failed (Status %lx)\n", Status); + } + +Quit: + /* Free the file buffer, and return */ RtlFreeHeap(ProcessHeap, 0, FileBuffer); - return Status; }
Modified: branches/setup_improvements/base/setup/usetup/inicache.h URL: http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/us... ============================================================================== --- branches/setup_improvements/base/setup/usetup/inicache.h [iso-8859-1] (original) +++ branches/setup_improvements/base/setup/usetup/inicache.h [iso-8859-1] Sun May 21 23:48:09 2017 @@ -74,6 +74,13 @@ /* FUNCTIONS ****************************************************************/
NTSTATUS +IniCacheLoadFromMemory( + PINICACHE *Cache, + PCHAR FileBuffer, + ULONG FileLength, + BOOLEAN String); + +NTSTATUS IniCacheLoad( PINICACHE *Cache, PWCHAR FileName,