Counts elements in a list.

Signed-off-by: Frediano Ziglio <frediano.zig...@cloud.com>
---
 grub-core/kern/list.c | 12 ++++++++++++
 include/grub/list.h   |  2 ++
 2 files changed, 14 insertions(+)

diff --git a/grub-core/kern/list.c b/grub-core/kern/list.c
index a256bb3f8..09761b0e5 100644
--- a/grub-core/kern/list.c
+++ b/grub-core/kern/list.c
@@ -53,3 +53,15 @@ grub_list_remove (grub_list_t item)
   item->next = 0;
   item->prev = 0;
 }
+
+grub_size_t
+grub_list_length (grub_list_t head)
+{
+  grub_list_t item;
+  grub_size_t length = 0;
+
+  FOR_LIST_ELEMENTS (item, head)
+    length++;
+
+  return length;
+}
diff --git a/include/grub/list.h b/include/grub/list.h
index 21f4b4b44..094eaf9cd 100644
--- a/include/grub/list.h
+++ b/include/grub/list.h
@@ -23,6 +23,7 @@
 #include <grub/symbol.h>
 #include <grub/err.h>
 #include <grub/compiler.h>
+#include <grub/types.h>
 
 struct grub_list
 {
@@ -33,6 +34,7 @@ typedef struct grub_list *grub_list_t;
 
 void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
 void EXPORT_FUNC(grub_list_remove) (grub_list_t item);
+grub_size_t EXPORT_FUNC(grub_list_length) (grub_list_t head);
 
 #define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = 
(var)->next)
 #define FOR_LIST_ELEMENTS_NEXT(var, list) for ((var) = (var)->next; (var); 
(var) = (var)->next)
-- 
2.43.0


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to