From 089a342b293c64436b491daa4fde4f971d92c64b Mon Sep 17 00:00:00 2001
From: Joursoir <chat@joursoir.net>
Date: Wed, 17 Nov 2021 19:30:11 +0300
Subject: fs: make scanfs()

---
 Library/UefiShellUfmCommandLib/fs.c | 22 ++++++++++++++++++++++
 Library/UefiShellUfmCommandLib/fs.h |  7 +++++++
 2 files changed, 29 insertions(+)

diff --git a/Library/UefiShellUfmCommandLib/fs.c b/Library/UefiShellUfmCommandLib/fs.c
index fe2d590..a675688 100644
--- a/Library/UefiShellUfmCommandLib/fs.c
+++ b/Library/UefiShellUfmCommandLib/fs.c
@@ -87,3 +87,25 @@ VOID fsa_release(struct fs_array *fsa)
 	}
 	FreePool(fsa);
 }
+
+struct fs_array *scanfs(VOID)
+{
+	UINTN handle_count;
+	EFI_HANDLE *handle_buffer;
+	struct fs_array *fsa;
+	EFI_STATUS status;
+
+	status = gBS->LocateHandleBuffer(
+		ByProtocol,
+		&gEfiSimpleFileSystemProtocolGuid,
+		NULL,
+		&handle_count,
+		&handle_buffer
+	);
+	if(EFI_ERROR(status) || handle_count <= 0)
+		return NULL;
+
+	fsa = fsa_alloc(handle_buffer, handle_count);
+	FreePool(handle_buffer);
+	return fsa;
+}
\ No newline at end of file
diff --git a/Library/UefiShellUfmCommandLib/fs.h b/Library/UefiShellUfmCommandLib/fs.h
index f7625b1..56df1ee 100644
--- a/Library/UefiShellUfmCommandLib/fs.h
+++ b/Library/UefiShellUfmCommandLib/fs.h
@@ -27,4 +27,11 @@ struct fs_array *fsa_alloc(EFI_HANDLE *handles, UINTN count);
 */
 VOID fsa_release(struct fs_array *fsa);
 
+/*
+ * Gets names of filesystems represented on the system
+ *
+ * return: A pointer to the allocated structure or NULL if allocation fails
+*/
+struct fs_array *scanfs(VOID);
+
 #endif /* UFM_FS_H */
-- 
cgit v1.2.3-18-g5258