xref: /reactos/boot/freeldr/freeldr/lib/arcsupp.c (revision 9452b29c)
1 /*
2  * PROJECT:     FreeLoader
3  * LICENSE:     MIT (https://spdx.org/licenses/MIT)
4  * PURPOSE:     Generic ARC Support Functions
5  * COPYRIGHT:   Copyright 2019-2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
6  */
7 
8 /* INCLUDES ******************************************************************/
9 
10 #include <freeldr.h>
11 
12 /* FUNCTIONS *****************************************************************/
13 
14 PSTR
15 GetNextArgumentValue(
16     _In_ ULONG Argc,
17     _In_ PCHAR Argv[],
18     _Inout_opt_ PULONG LastIndex,
19     _In_ PCSTR ArgumentName)
20 {
21     ULONG i;
22     SIZE_T ArgNameLen = strlen(ArgumentName);
23 
24     for (i = (LastIndex ? *LastIndex : 0); i < Argc; ++i)
25     {
26         if (Argv[i] /* NULL pointer is a valid entry in Argv: skip it */ &&
27             (strlen(Argv[i]) >= ArgNameLen + 1 /* Count the '=' sign */) &&
28             (_strnicmp(Argv[i], ArgumentName, ArgNameLen) == 0) &&
29             (Argv[i][ArgNameLen] == '='))
30         {
31             /* Found it, return the value */
32             if (LastIndex) *LastIndex = i;
33             return &Argv[i][ArgNameLen + 1];
34         }
35     }
36 
37     if (LastIndex) *LastIndex = (ULONG)-1;
38     return NULL;
39 }
40 
41 PSTR
42 GetArgumentValue(
43     _In_ ULONG Argc,
44     _In_ PCHAR Argv[],
45     _In_ PCSTR ArgumentName)
46 {
47     return GetNextArgumentValue(Argc, Argv, NULL, ArgumentName);
48 }
49 
50 /* EOF */
51