From 7bbbcb62f632e12edc228b1ab675db88a331b20c Mon Sep 17 00:00:00 2001 From: Joursoir Date: Wed, 17 Nov 2021 18:25:41 +0300 Subject: dir: make dirl_getn() --- Library/UefiShellUfmCommandLib/dir.c | 18 ++++++++++++++++++ Library/UefiShellUfmCommandLib/dir.h | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/Library/UefiShellUfmCommandLib/dir.c b/Library/UefiShellUfmCommandLib/dir.c index 8e3a083..6049d18 100644 --- a/Library/UefiShellUfmCommandLib/dir.c +++ b/Library/UefiShellUfmCommandLib/dir.c @@ -88,3 +88,21 @@ struct dir_list *scandir(CONST CHAR16 *search_path, CONST CHAR16 *wildcard, SHELL_FREE_NON_NULL(path); return list; } + +EFI_SHELL_FILE_INFO *dirl_getn(struct dir_list *dl, UINTN n) +{ + UINTN i = 1; + EFI_SHELL_FILE_INFO *list_head, *node; + list_head = dl->list_head; + + if(n < 1 || n > dl->len) + return NULL; + + node = (EFI_SHELL_FILE_INFO *)GetFirstNode(&list_head->Link); + while(!IsNull(&list_head->Link, &node->Link) && i != n) { + node = (EFI_SHELL_FILE_INFO *)GetNextNode(&list_head->Link, &node->Link); + i++; + } + + return node; +} diff --git a/Library/UefiShellUfmCommandLib/dir.h b/Library/UefiShellUfmCommandLib/dir.h index 94ad601..912b00f 100644 --- a/Library/UefiShellUfmCommandLib/dir.h +++ b/Library/UefiShellUfmCommandLib/dir.h @@ -41,4 +41,14 @@ VOID dirl_release(struct dir_list *dl); struct dir_list *scandir(CONST CHAR16 *search_path, CONST CHAR16 *wildcard, CONST UINT64 attr); +/* + * Gets the data stored in the specified node of directory linked list + * + * dl: the pointer to the directory list + * n: the node number (starts with 1) + * + * return: A pointer to the EFI_SHELL_FILE_INFO or NULL if search fails +*/ +EFI_SHELL_FILE_INFO *dirl_getn(struct dir_list *dl, UINTN n); + #endif /* UFM_DIR_H */ -- cgit v1.2.3-18-g5258