Author: hbelusca
Date: Wed May 31 00:23:53 2017
New Revision: 74711

URL: http://svn.reactos.org/svn/reactos?rev=74711&view=rev
Log:
[SETUPLIB]: Additions to inicache.c: Split IniCacheLoad() and IniCacheSave() 
into: themselves & IniCacheLoadByHandle() and IniCacheSaveByHandle(), 
respectively, so that we can load & save INI files if we already have an opened 
handle to them.

Modified:
    branches/setup_improvements/base/setup/lib/inicache.c
    branches/setup_improvements/base/setup/lib/inicache.h

Modified: branches/setup_improvements/base/setup/lib/inicache.c
URL: 
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/lib/inicache.c?rev=74711&r1=74710&r2=74711&view=diff
==============================================================================
--- branches/setup_improvements/base/setup/lib/inicache.c       [iso-8859-1] 
(original)
+++ branches/setup_improvements/base/setup/lib/inicache.c       [iso-8859-1] 
Wed May 31 00:23:53 2017
@@ -546,45 +546,19 @@
 }
 
 NTSTATUS
-IniCacheLoad(
+IniCacheLoadByHandle(
     PINICACHE *Cache,
-    PWCHAR FileName,
+    HANDLE FileHandle,
     BOOLEAN String)
 {
-    UNICODE_STRING Name;
-    OBJECT_ATTRIBUTES ObjectAttributes;
+    NTSTATUS Status;
+    IO_STATUS_BLOCK IoStatusBlock;
     FILE_STANDARD_INFORMATION FileInfo;
-    IO_STATUS_BLOCK IoStatusBlock;
-    HANDLE FileHandle;
-    NTSTATUS Status;
     PCHAR FileBuffer;
     ULONG FileLength;
     LARGE_INTEGER FileOffset;
 
     *Cache = NULL;
-
-    /* Open ini file */
-    RtlInitUnicodeString(&Name, FileName);
-
-    InitializeObjectAttributes(&ObjectAttributes,
-                               &Name,
-                               0,
-                               NULL,
-                               NULL);
-
-    Status = NtOpenFile(&FileHandle,
-                        GENERIC_READ | SYNCHRONIZE,
-                        &ObjectAttributes,
-                        &IoStatusBlock,
-                        FILE_SHARE_READ,
-                        FILE_SYNCHRONOUS_IO_NONALERT | 
FILE_NON_DIRECTORY_FILE);
-    if (!NT_SUCCESS(Status))
-    {
-        DPRINT("NtOpenFile() failed (Status %lx)\n", Status);
-        return Status;
-    }
-
-    DPRINT("NtOpenFile() successful\n");
 
     /* Query file size */
     Status = NtQueryInformationFile(FileHandle,
@@ -595,7 +569,6 @@
     if (!NT_SUCCESS(Status))
     {
         DPRINT("NtQueryInformationFile() failed (Status %lx)\n", Status);
-        NtClose(FileHandle);
         return Status;
     }
 
@@ -610,7 +583,6 @@
     if (FileBuffer == NULL)
     {
         DPRINT1("RtlAllocateHeap() failed\n");
-        NtClose(FileHandle);
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
@@ -629,8 +601,6 @@
     /* Append NULL-terminator */
     FileBuffer[FileLength] = 0;
 
-    NtClose(FileHandle);
-
     if (!NT_SUCCESS(Status))
     {
         DPRINT("NtReadFile() failed (Status %lx)\n", Status);
@@ -646,6 +616,50 @@
 Quit:
     /* Free the file buffer, and return */
     RtlFreeHeap(ProcessHeap, 0, FileBuffer);
+    return Status;
+}
+
+NTSTATUS
+IniCacheLoad(
+    PINICACHE *Cache,
+    PWCHAR FileName,
+    BOOLEAN String)
+{
+    NTSTATUS Status;
+    UNICODE_STRING Name;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+    IO_STATUS_BLOCK IoStatusBlock;
+    HANDLE FileHandle;
+
+    *Cache = NULL;
+
+    /* Open the INI file */
+    RtlInitUnicodeString(&Name, FileName);
+
+    InitializeObjectAttributes(&ObjectAttributes,
+                               &Name,
+                               OBJ_CASE_INSENSITIVE,
+                               NULL,
+                               NULL);
+
+    Status = NtOpenFile(&FileHandle,
+                        FILE_GENERIC_READ | SYNCHRONIZE,
+                        &ObjectAttributes,
+                        &IoStatusBlock,
+                        FILE_SHARE_READ,
+                        FILE_SYNCHRONOUS_IO_NONALERT | 
FILE_NON_DIRECTORY_FILE);
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT("NtOpenFile() failed (Status %lx)\n", Status);
+        return Status;
+    }
+
+    DPRINT("NtOpenFile() successful\n");
+
+    Status = IniCacheLoadByHandle(Cache, FileHandle, String);
+
+    /* Close the INI file */
+    NtClose(FileHandle);
     return Status;
 }
 
@@ -933,24 +947,19 @@
 
 
 NTSTATUS
-IniCacheSave(
+IniCacheSaveByHandle(
     PINICACHE Cache,
-    PWCHAR FileName)
-{
-    UNICODE_STRING Name;
+    HANDLE FileHandle)
+{
+    NTSTATUS Status;
     PINICACHESECTION Section;
     PINICACHEKEY Key;
     ULONG BufferSize;
     PCHAR Buffer;
     PCHAR Ptr;
     ULONG Len;
-    NTSTATUS Status;
-
-    OBJECT_ATTRIBUTES ObjectAttributes;
     IO_STATUS_BLOCK IoStatusBlock;
     LARGE_INTEGER Offset;
-    HANDLE FileHandle;
-
 
     /* Calculate required buffer size */
     BufferSize = 0;
@@ -1010,33 +1019,7 @@
         }
     }
 
-    /* Create ini file */
-    RtlInitUnicodeString(&Name, FileName);
-
-    InitializeObjectAttributes(&ObjectAttributes,
-                               &Name,
-                               0,
-                               NULL,
-                               NULL);
-
-    Status = NtCreateFile(&FileHandle,
-                          GENERIC_WRITE | SYNCHRONIZE,
-                          &ObjectAttributes,
-                          &IoStatusBlock,
-                          NULL,
-                          FILE_ATTRIBUTE_NORMAL,
-                          0,
-                          FILE_SUPERSEDE,
-                          FILE_SYNCHRONOUS_IO_NONALERT | FILE_SEQUENTIAL_ONLY,
-                          NULL,
-                          0);
-    if (!NT_SUCCESS(Status))
-    {
-        DPRINT("NtCreateFile() failed (Status %lx)\n", Status);
-        RtlFreeHeap(ProcessHeap, 0, Buffer);
-        return Status;
-    }
-
+    /* Write to the INI file */
     Offset.QuadPart = 0LL;
     Status = NtWriteFile(FileHandle,
                          NULL,
@@ -1049,17 +1032,57 @@
                          NULL);
     if (!NT_SUCCESS(Status))
     {
-      DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
-      NtClose(FileHandle);
-      RtlFreeHeap(ProcessHeap, 0, Buffer);
-      return Status;
-    }
-
+        DPRINT("NtWriteFile() failed (Status %lx)\n", Status);
+        RtlFreeHeap(ProcessHeap, 0, Buffer);
+        return Status;
+    }
+
+    RtlFreeHeap(ProcessHeap, 0, Buffer);
+    return STATUS_SUCCESS;
+}
+
+NTSTATUS
+IniCacheSave(
+    PINICACHE Cache,
+    PWCHAR FileName)
+{
+    NTSTATUS Status;
+    UNICODE_STRING Name;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+    IO_STATUS_BLOCK IoStatusBlock;
+    HANDLE FileHandle;
+
+    /* Create the INI file */
+    RtlInitUnicodeString(&Name, FileName);
+
+    InitializeObjectAttributes(&ObjectAttributes,
+                               &Name,
+                               0,
+                               NULL,
+                               NULL);
+
+    Status = NtCreateFile(&FileHandle,
+                          FILE_GENERIC_WRITE | SYNCHRONIZE,
+                          &ObjectAttributes,
+                          &IoStatusBlock,
+                          NULL,
+                          FILE_ATTRIBUTE_NORMAL,
+                          0,
+                          FILE_SUPERSEDE,
+                          FILE_SYNCHRONOUS_IO_NONALERT | FILE_SEQUENTIAL_ONLY 
| FILE_NON_DIRECTORY_FILE,
+                          NULL,
+                          0);
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT("NtCreateFile() failed (Status %lx)\n", Status);
+        return Status;
+    }
+
+    Status = IniCacheSaveByHandle(Cache, FileHandle);
+
+    /* Close the INI file */
     NtClose(FileHandle);
-
-    RtlFreeHeap(ProcessHeap, 0, Buffer);
-
-    return STATUS_SUCCESS;
+    return Status;
 }
 
 

Modified: branches/setup_improvements/base/setup/lib/inicache.h
URL: 
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/lib/inicache.h?rev=74711&r1=74710&r2=74711&view=diff
==============================================================================
--- branches/setup_improvements/base/setup/lib/inicache.h       [iso-8859-1] 
(original)
+++ branches/setup_improvements/base/setup/lib/inicache.h       [iso-8859-1] 
Wed May 31 00:23:53 2017
@@ -63,6 +63,12 @@
     BOOLEAN String);
 
 NTSTATUS
+IniCacheLoadByHandle(
+    PINICACHE *Cache,
+    HANDLE FileHandle,
+    BOOLEAN String);
+
+NTSTATUS
 IniCacheLoad(
     PINICACHE *Cache,
     PWCHAR FileName,
@@ -112,6 +118,11 @@
 IniCacheCreate(VOID);
 
 NTSTATUS
+IniCacheSaveByHandle(
+    PINICACHE Cache,
+    HANDLE FileHandle);
+
+NTSTATUS
 IniCacheSave(
     PINICACHE Cache,
     PWCHAR FileName);


Reply via email to