From dc3f1f5224c86c3d99f6c401accadd2769552038 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Wed, 17 Nov 2021 18:14:10 +0300 Subject: dir: make scandir() --- Library/UefiShellUfmCommandLib/dir.c | 26 ++++++++++++++++++++++++++ Library/UefiShellUfmCommandLib/dir.h | 14 ++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'Library') diff --git a/Library/UefiShellUfmCommandLib/dir.c b/Library/UefiShellUfmCommandLib/dir.c index 12bc13b..8e3a083 100644 --- a/Library/UefiShellUfmCommandLib/dir.c +++ b/Library/UefiShellUfmCommandLib/dir.c @@ -62,3 +62,29 @@ VOID dirl_release(struct dir_list *dl) FreePool(dl); } + +struct dir_list *scandir(CONST CHAR16 *search_path, CONST CHAR16 *wildcard, + CONST UINT64 attr) +{ + UINTN i, path_size = 0; + CHAR16 *path = NULL; + struct dir_list *list; + + path = StrnCatGrow(&path, &path_size, search_path, 0); + if(!path) + return NULL; + + i = StrLen(path) - 1; + if(path[i] != L'\\' && path[i] != L'/') + path = StrnCatGrow(&path, &path_size, L"\\", 0); + + path = StrnCatGrow(&path, &path_size, wildcard, 0); + if(!path) + return NULL; + + PathCleanUpDirectories(path); + list = dirl_alloc(path, attr); + + SHELL_FREE_NON_NULL(path); + return list; +} diff --git a/Library/UefiShellUfmCommandLib/dir.h b/Library/UefiShellUfmCommandLib/dir.h index be560ad..94ad601 100644 --- a/Library/UefiShellUfmCommandLib/dir.h +++ b/Library/UefiShellUfmCommandLib/dir.h @@ -27,4 +27,18 @@ struct dir_list *dirl_alloc(CHAR16 *search_path, CONST UINT64 attr); */ VOID dirl_release(struct dir_list *dl); +/* + * Opens a directory and gets all its matching entries. This function + * supports wildcards and will process '?' and '*' as such + * P.S: it's frontend function of dirl_alloc() + * + * search_path: the pointer to path string + * wildcard: the pointer to wildcard string + * attr: required file attributes + * + * return: A pointer to the allocated structure or NULL if allocation fails +*/ +struct dir_list *scandir(CONST CHAR16 *search_path, CONST CHAR16 *wildcard, + CONST UINT64 attr); + #endif /* UFM_DIR_H */ -- cgit v1.2.3-18-g5258