mirror of
https://github.com/systemd/systemd.git
synced 2025-01-11 09:18:07 +03:00
boot: Add startswith() and endswith() functions with no_case variants
Adapted from string-util
This commit is contained in:
parent
fffd5e8ee3
commit
cb347d263d
@ -1493,7 +1493,6 @@ static VOID config_load_entries(
|
||||
UINTN bufsize;
|
||||
EFI_FILE_INFO *f;
|
||||
_cleanup_freepool_ CHAR8 *content = NULL;
|
||||
UINTN len;
|
||||
|
||||
bufsize = sizeof(buf);
|
||||
err = uefi_call_wrapper(entries_dir->Read, 3, entries_dir, &bufsize, buf);
|
||||
@ -1506,12 +1505,9 @@ static VOID config_load_entries(
|
||||
if (f->Attribute & EFI_FILE_DIRECTORY)
|
||||
continue;
|
||||
|
||||
len = StrLen(f->FileName);
|
||||
if (len < 6)
|
||||
if (!endswith_no_case(f->FileName, L".conf"))
|
||||
continue;
|
||||
if (StriCmp(f->FileName + len - 5, L".conf") != 0)
|
||||
continue;
|
||||
if (StrnCmp(f->FileName, L"auto-", 5) == 0)
|
||||
if (startswith(f->FileName, L"auto-"))
|
||||
continue;
|
||||
|
||||
err = file_read(entries_dir, f->FileName, 0, 0, &content, NULL);
|
||||
@ -1894,7 +1890,6 @@ static VOID config_entry_add_linux(
|
||||
UINTN szs[ELEMENTSOF(sections)-1] = {};
|
||||
UINTN addrs[ELEMENTSOF(sections)-1] = {};
|
||||
CHAR8 *content = NULL;
|
||||
UINTN len;
|
||||
CHAR8 *line;
|
||||
UINTN pos = 0;
|
||||
CHAR8 *key, *value;
|
||||
@ -1914,12 +1909,9 @@ static VOID config_entry_add_linux(
|
||||
continue;
|
||||
if (f->Attribute & EFI_FILE_DIRECTORY)
|
||||
continue;
|
||||
len = StrLen(f->FileName);
|
||||
if (len < 5)
|
||||
if (!endswith_no_case(f->FileName, L".efi"))
|
||||
continue;
|
||||
if (StriCmp(f->FileName + len - 4, L".efi") != 0)
|
||||
continue;
|
||||
if (StrnCmp(f->FileName, L"auto-", 5) == 0)
|
||||
if (startswith(f->FileName, L"auto-"))
|
||||
continue;
|
||||
|
||||
/* look for .osrel and .cmdline sections in the .efi binary */
|
||||
|
@ -375,6 +375,62 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const CHAR16 *startswith(const CHAR16 *s, const CHAR16 *prefix) {
|
||||
UINTN l;
|
||||
|
||||
l = StrLen(prefix);
|
||||
if (StrnCmp(s, prefix, l) == 0)
|
||||
return s + l;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const CHAR16 *endswith(const CHAR16 *s, const CHAR16 *postfix) {
|
||||
UINTN sl, pl;
|
||||
|
||||
sl = StrLen(s);
|
||||
pl = StrLen(postfix);
|
||||
|
||||
if (pl == 0)
|
||||
return s + sl;
|
||||
|
||||
if (sl < pl)
|
||||
return NULL;
|
||||
|
||||
if (StrnCmp(s + sl - pl, postfix, pl) != 0)
|
||||
return NULL;
|
||||
|
||||
return s + sl - pl;
|
||||
}
|
||||
|
||||
const CHAR16 *startswith_no_case(const CHAR16 *s, const CHAR16 *prefix) {
|
||||
UINTN l;
|
||||
|
||||
l = StrLen(prefix);
|
||||
if (StriCmp(s, prefix) == 0)
|
||||
return s + l;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const CHAR16 *endswith_no_case(const CHAR16 *s, const CHAR16 *postfix) {
|
||||
UINTN sl, pl;
|
||||
|
||||
sl = StrLen(s);
|
||||
pl = StrLen(postfix);
|
||||
|
||||
if (pl == 0)
|
||||
return s + sl;
|
||||
|
||||
if (sl < pl)
|
||||
return NULL;
|
||||
|
||||
if (StriCmp(s + sl - pl, postfix) != 0)
|
||||
return NULL;
|
||||
|
||||
return s + sl - pl;
|
||||
}
|
||||
|
||||
EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **ret, UINTN *ret_size) {
|
||||
_cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
|
||||
_cleanup_freepool_ CHAR8 *buf = NULL;
|
||||
|
@ -39,6 +39,12 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c);
|
||||
CHAR16 *stra_to_path(CHAR8 *stra);
|
||||
CHAR16 *stra_to_str(CHAR8 *stra);
|
||||
|
||||
const CHAR16 *startswith(const CHAR16 *s, const CHAR16 *prefix);
|
||||
const CHAR16 *endswith(const CHAR16 *s, const CHAR16 *postfix);
|
||||
|
||||
const CHAR16 *startswith_no_case(const CHAR16 *s, const CHAR16 *prefix);
|
||||
const CHAR16 *endswith_no_case(const CHAR16 *s, const CHAR16 *postfix);
|
||||
|
||||
EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size);
|
||||
|
||||
static inline void FreePoolp(void *p) {
|
||||
|
Loading…
Reference in New Issue
Block a user