https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ad9e57895ddc4bafb117d6...
commit ad9e57895ddc4bafb117d68869541c1a025bf47c Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Fri Dec 22 23:28:53 2017 +0100 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org 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)