Counts elements in a list.
Signed-off-by: Frediano Ziglio <[email protected]>
---
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
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel