X-Git-Url: https://code.delx.au/refind/blobdiff_plain/cbe9257ed1e75977e6744ff6171ed70cb079c338..83e356eff90bc8d5b4de9796e86df286991b2e3a:/refind/mystrings.c diff --git a/refind/mystrings.c b/refind/mystrings.c index 645511c..539aba2 100644 --- a/refind/mystrings.c +++ b/refind/mystrings.c @@ -238,14 +238,29 @@ BOOLEAN LimitStringLength(CHAR16 *TheString, UINTN Limit) { // non-digit characters. For instance, if InString is "foo-3.3.4-7.img", // this function returns "3.3.4-7". If InString contains no digits, // the return value is NULL. +// As a special case for Arch Linux the strings "linux" and "linux-lts" +// are considered to be digits. CHAR16 *FindNumbers(IN CHAR16 *InString) { - UINTN i, StartOfElement, EndOfElement = 0, CopyLength; + UINTN i, StartOfElement = 0, EndOfElement = 0, CopyLength; CHAR16 *Found = NULL; if (InString == NULL) return NULL; - StartOfElement = StrLen(InString); + // Find "linux-lts" or "linux" + Found = MyStrStr(InString, L"linux-lts"); + if (Found != NULL) { + StartOfElement = Found - InString; + EndOfElement = StartOfElement + StrLen(L"linux-lts") - 1; + } else { + Found = MyStrStr(InString, L"linux"); + if (Found != NULL) { + StartOfElement = Found - InString; + EndOfElement = StartOfElement + StrLen(L"linux") - 1; + } // if + } // if/else + Found = NULL; + // Find start & end of target element for (i = 0; InString[i] != L'\0'; i++) { if ((InString[i] >= L'0') && (InString[i] <= L'9')) { @@ -255,6 +270,7 @@ CHAR16 *FindNumbers(IN CHAR16 *InString) { EndOfElement = i; } // if } // for + // Extract the target element if (EndOfElement > 0) { if (EndOfElement >= StartOfElement) {