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/u…
==============================================================================
--- 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/u…
==============================================================================
--- 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,