https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ad9e57895ddc4bafb117d68869541c1a025bf47c

commit ad9e57895ddc4bafb117d68869541c1a025bf47c
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Fri Dec 22 23:28:53 2017 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Sun Oct 28 00:59:45 2018 +0200

    [SETUPLIB] Improve an alternate code implementation.
    
    Comment about the status of two '#if 0'.
    
    [SETUPLIB] Fix some uninitialized variables (caught by clang-cl).
    Also, initialize NtName->Length in return paths in ResolveArcNameManually().
---
 base/setup/lib/utils/arcname.c | 57 +++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/base/setup/lib/utils/arcname.c b/base/setup/lib/utils/arcname.c
index 2c2308a595..56f44cfef3 100644
--- a/base/setup/lib/utils/arcname.c
+++ b/base/setup/lib/utils/arcname.c
@@ -281,12 +281,14 @@ ArcMatchToken_UStr(
     while (TokenTable[Index])
     {
 #if 0
-        Length = wcslen(TokenTable[Index])*sizeof(WCHAR);
-        if (RtlCompareMemory(CandidateToken->Buffer, TokenTable[Index], 
Length) == Length)
+        Length = wcslen(TokenTable[Index]);
+        if ((Length == CandidateToken->Length / sizeof(WCHAR)) &&
+            (_wcsnicmp(CandidateToken->Buffer, TokenTable[Index], Length) == 
0))
+        {
             break;
+        }
 #else
         RtlInitUnicodeString(&Token, TokenTable[Index]);
-        // if (RtlCompareUnicodeString(CandidateToken, &Token, TRUE) == 0)
         if (RtlEqualUnicodeString(CandidateToken, &Token, TRUE))
             break;
 #endif
@@ -376,13 +378,13 @@ ParseArcName(
     WCHAR TokenBuffer[50];
     UNICODE_STRING Token;
     PCWSTR p, q;
-    ULONG AdapterKey;
-    ULONG ControllerKey;
-    ULONG PeripheralKey;
-    ULONG PartitionNumber;
-    ADAPTER_TYPE AdapterType;
-    CONTROLLER_TYPE ControllerType;
-    PERIPHERAL_TYPE PeripheralType;
+    ULONG AdapterKey = 0;
+    ULONG ControllerKey = 0;
+    ULONG PeripheralKey = 0;
+    ULONG PartitionNumber = 0;
+    ADAPTER_TYPE AdapterType = AdapterTypeMax;
+    CONTROLLER_TYPE ControllerType = ControllerTypeMax;
+    PERIPHERAL_TYPE PeripheralType = PeripheralTypeMax;
     BOOLEAN UseSignature = FALSE;
 
     /*
@@ -417,7 +419,8 @@ ParseArcName(
     else
     {
         /* Check for regular adapters */
-        AdapterType = 
(ADAPTER_TYPE)/*ArcMatchTokenU*/ArcMatchToken_UStr(/*Token.Buffer*/&Token, 
AdapterTypes_U);
+        // ArcMatchTokenU(Token.Buffer, AdapterTypes_U);
+        AdapterType = (ADAPTER_TYPE)ArcMatchToken_UStr(&Token, AdapterTypes_U);
         if (AdapterType >= AdapterTypeMax)
         {
             DPRINT1("Invalid adapter type %wZ\n", &Token);
@@ -449,7 +452,8 @@ ParseArcName(
         DPRINT1("%S(%lu) adapter doesn't have a controller!\n", 
AdapterTypes_U[AdapterType], AdapterKey);
         return STATUS_OBJECT_PATH_SYNTAX_BAD;
     }
-    ControllerType = 
(CONTROLLER_TYPE)/*ArcMatchTokenU*/ArcMatchToken_UStr(/*Token.Buffer*/&Token, 
ControllerTypes_U);
+    // ArcMatchTokenU(Token.Buffer, ControllerTypes_U);
+    ControllerType = (CONTROLLER_TYPE)ArcMatchToken_UStr(&Token, 
ControllerTypes_U);
     if (ControllerType >= ControllerTypeMax)
     {
         DPRINT1("Invalid controller type %wZ\n", &Token);
@@ -494,7 +498,8 @@ ParseArcName(
                ControllerTypes_U[ControllerType], ControllerKey);
         return STATUS_OBJECT_PATH_SYNTAX_BAD;
     }
-    PeripheralType = 
(PERIPHERAL_TYPE)/*ArcMatchTokenU*/ArcMatchToken_UStr(/*Token.Buffer*/&Token, 
PeripheralTypes_U);
+    // ArcMatchTokenU(Token.Buffer, PeripheralTypes_U);
+    PeripheralType = (PERIPHERAL_TYPE)ArcMatchToken_UStr(&Token, 
PeripheralTypes_U);
     if (PeripheralType >= PeripheralTypeMax)
     {
         DPRINT1("Invalid peripheral type %wZ\n", &Token);
@@ -588,11 +593,6 @@ ResolveArcNameNtSymLink(
     if (NtName->MaximumLength < sizeof(UNICODE_NULL))
         return STATUS_BUFFER_TOO_SMALL;
 
-#if 0
-    *NtName->Buffer = UNICODE_NULL;
-    NtName->Length = 0;
-#endif
-
     /* Open the \ArcName object directory */
     RtlInitUnicodeString(&ArcNameDir, L"\\ArcName");
     InitializeObjectAttributes(&ObjectAttributes,
@@ -692,11 +692,6 @@ ResolveArcNameManually(
     if (NtName->MaximumLength < sizeof(UNICODE_NULL))
         return STATUS_BUFFER_TOO_SMALL;
 
-#if 0
-    *NtName->Buffer = UNICODE_NULL;
-    NtName->Length = 0;
-#endif
-
     /* Parse the ARC path */
     Status = ParseArcName(ArcNamePath,
                           &AdapterKey,
@@ -712,7 +707,7 @@ ResolveArcNameManually(
 
     // TODO: Check the partition number in case of fdisks and cdroms??
 
-    /* Check for adapters that don't take any extra controller or peripheral 
nodes */
+    /* Check for adapters that don't take any extra controller or peripheral 
node */
     if (AdapterType == NetAdapter || AdapterType == RamdiskAdapter)
     {
         if (AdapterType == NetAdapter)
@@ -771,7 +766,7 @@ ResolveArcNameManually(
                                     L"\\Device\\Harddisk%lu\\Partition%lu",
                                     DiskEntry->DiskNumber, PartitionNumber);
     }
-#if 0
+#if 0 // FIXME: Not implemented yet!
     else
     if (PeripheralType == VDiskPeripheral)
     {
@@ -783,7 +778,16 @@ ResolveArcNameManually(
 #endif
 
     if (!NT_SUCCESS(Status))
+    {
+        /* Returned NtName is invalid, so zero it out */
+        *NtName->Buffer = UNICODE_NULL;
+        NtName->Length = 0;
+
         return Status;
+    }
+
+    /* Update NtName length */
+    NtName->Length = wcslen(NtName->Buffer) * sizeof(WCHAR);
 
     return STATUS_SUCCESS;
 }
@@ -874,10 +878,11 @@ ArcPathToNtPath(
         }
     }
     NtPath->Length = wcslen(NtPath->Buffer) * sizeof(WCHAR);
+
     return TRUE;
 }
 
-#if 0
+#if 0 // FIXME: Not implemented yet!
 PWSTR
 NtPathToArcPath(
     IN PWSTR NtPath)

Reply via email to