diff options
author | Joursoir <chat@joursoir.net> | 2021-11-17 18:25:41 +0300 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2021-11-17 18:25:41 +0300 |
commit | 7bbbcb62f632e12edc228b1ab675db88a331b20c (patch) | |
tree | f99309413dc3b00fe60c0d0677f083f39fdbe721 /Library/UefiShellUfmCommandLib | |
parent | dc3f1f5224c86c3d99f6c401accadd2769552038 (diff) | |
download | ufm-7bbbcb62f632e12edc228b1ab675db88a331b20c.tar.gz ufm-7bbbcb62f632e12edc228b1ab675db88a331b20c.tar.bz2 ufm-7bbbcb62f632e12edc228b1ab675db88a331b20c.zip |
dir: make dirl_getn()
Diffstat (limited to 'Library/UefiShellUfmCommandLib')
-rw-r--r-- | Library/UefiShellUfmCommandLib/dir.c | 18 | ||||
-rw-r--r-- | Library/UefiShellUfmCommandLib/dir.h | 10 |
2 files changed, 28 insertions, 0 deletions
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 */ |