]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* include/grub/list.h (FOR_LIST_ELEMENTS_SAFE): New macro.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 2 Jul 2012 09:19:22 +0000 (11:19 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 2 Jul 2012 09:19:22 +0000 (11:19 +0200)
* include/grub/command.h (FOR_COMMANDS_SAFE): Likewise.
* grub-core/commands/help.c (grub_cmd_help): Use FOR_COMMANDS_SAFE.

grub-core/commands/help.c
include/grub/command.h
include/grub/list.h

index d64c28915d1aaa9cd706cd818909463ce4aaac7d..f0be89baa191087cc3aa2ce8f1ecc96dccbb42de 100644 (file)
@@ -99,12 +99,13 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
   else
     {
       int i;
-      grub_command_t cmd_iter, cmd;
+      grub_command_t cmd_iter, cmd, cmd_next;
 
       for (i = 0; i < argc; i++)
        {
          currarg = args[i];
-         FOR_COMMANDS(cmd_iter)
+
+         FOR_COMMANDS_SAFE (cmd_iter, cmd_next)
          {
            if (!(cmd_iter->prio & GRUB_COMMAND_FLAG_ACTIVE))
              continue;
index 6d43499be105a372ad577ae608311af82782269f..8705a6355191ff3c8b2f081f444c3e568cd6ebb9 100644 (file)
@@ -121,6 +121,7 @@ grub_command_execute (const char *name, int argc, char **argv)
 }
 
 #define FOR_COMMANDS(var) FOR_LIST_ELEMENTS((var), grub_command_list)
+#define FOR_COMMANDS_SAFE(var, next) FOR_LIST_ELEMENTS_SAFE((var), (next), grub_command_list)
 
 void grub_register_core_commands (void);
 
index cadb2d9f9d8470d6ec9977aa45419dd8ea054147..6f6dec044cc8290c671be04c53cba5cdef9b8ebe 100644 (file)
@@ -35,6 +35,7 @@ void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
 void EXPORT_FUNC(grub_list_remove) (grub_list_t item);
 
 #define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = (var)->next)
+#define FOR_LIST_ELEMENTS_SAFE(var, nxt, list) for ((var) = (list), (nxt) = ((var) ? (var)->next : 0); (var); (var) = (nxt), (nxt) = (var)->next)
 
 static inline void *
 grub_bad_type_cast_real (int line, const char *file)