]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Remove prio_list
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 12 Feb 2012 02:52:17 +0000 (03:52 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 12 Feb 2012 02:52:17 +0000 (03:52 +0100)
grub-core/commands/help.c
grub-core/commands/minicmd.c
grub-core/kern/command.c
grub-core/kern/list.c
grub-core/normal/completion.c
include/grub/command.h
include/grub/list.h

index f33e55635a08480eb000fa7eccbc7be5ab7aca69..d64c28915d1aaa9cd706cd818909463ce4aaac7d 100644 (file)
@@ -40,7 +40,7 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
       grub_command_t cmd;
       FOR_COMMANDS(cmd)
       {
-       if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE))
+       if ((cmd->prio & GRUB_COMMAND_FLAG_ACTIVE))
          {
            struct grub_term_output *term;
            const char *summary_translated = _(cmd->summary);
@@ -106,7 +106,7 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
          currarg = args[i];
          FOR_COMMANDS(cmd_iter)
          {
-           if (!(cmd_iter->prio & GRUB_PRIO_LIST_FLAG_ACTIVE))
+           if (!(cmd_iter->prio & GRUB_COMMAND_FLAG_ACTIVE))
              continue;
 
            if (grub_strncmp (cmd_iter->name, currarg,
index ce9a6cc27ae617836c1e6a969afb61d725a4a53c..2a258bcfe4a4e05db515be976edf5728471a65e6 100644 (file)
@@ -83,8 +83,8 @@ grub_mini_cmd_help (struct grub_command *cmd __attribute__ ((unused)),
 
   for (p = grub_command_list; p; p = p->next)
     grub_printf ("%s (%d%c)\t%s\n", p->name,
-                p->prio & GRUB_PRIO_LIST_PRIO_MASK,
-                (p->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) ? '+' : '-',
+                p->prio & GRUB_COMMAND_PRIO_MASK,
+                (p->prio & GRUB_COMMAND_FLAG_ACTIVE) ? '+' : '-',
                 p->description);
 
   return 0;
index 91e4691817244a642f74e48c914a1b6662d40fdf..acd7218799220916ce5480c57ce34751c8578189 100644 (file)
@@ -30,6 +30,9 @@ grub_register_command_prio (const char *name,
                            int prio)
 {
   grub_command_t cmd;
+  int inactive = 0;
+
+  grub_command_t *p, q;
 
   cmd = (grub_command_t) grub_zalloc (sizeof (*cmd));
   if (! cmd)
@@ -42,9 +45,34 @@ grub_register_command_prio (const char *name,
 
   cmd->flags = 0;
   cmd->prio = prio;
+    
+  for (p = &grub_command_list, q = *p; q; p = &(q->next), q = q->next)
+    {
+      int r;
+
+      r = grub_strcmp (cmd->name, q->name);
+      if (r < 0)
+       break;
+      if (r > 0)
+       continue;
+
+      if (cmd->prio >= (q->prio & GRUB_COMMAND_PRIO_MASK))
+       {
+         q->prio &= ~GRUB_COMMAND_FLAG_ACTIVE;
+         break;
+       }
+
+      inactive = 1;
+    }
+
+  *p = cmd;
+  cmd->next = q;
+  if (q)
+    q->prev = &cmd->next;
+  cmd->prev = p;
 
-  grub_prio_list_insert (GRUB_AS_PRIO_LIST_P (&grub_command_list),
-                        GRUB_AS_PRIO_LIST (cmd));
+  if (! inactive)
+    cmd->prio |= GRUB_COMMAND_FLAG_ACTIVE;
 
   return cmd;
 }
@@ -52,6 +80,8 @@ grub_register_command_prio (const char *name,
 void
 grub_unregister_command (grub_command_t cmd)
 {
-  grub_prio_list_remove (GRUB_AS_PRIO_LIST (cmd));
+  if ((cmd->prio & GRUB_COMMAND_FLAG_ACTIVE) && (cmd->next))
+    cmd->next->prio |= GRUB_COMMAND_FLAG_ACTIVE;
+  grub_list_remove (GRUB_AS_LIST (cmd));
   grub_free (cmd);
 }
index f7c4e6bbe3b59242dd28562228b9e88792a7268f..81248db4880f89a20ab449bc11b1ce1a338f7fe3 100644 (file)
@@ -32,39 +32,3 @@ grub_named_list_find (grub_named_list_t head, const char *name)
 
   return NULL;
 }
-
-void
-grub_prio_list_insert (grub_prio_list_t *head, grub_prio_list_t nitem)
-{
-  int inactive = 0;
-
-  grub_prio_list_t *p, q;
-    
-  for (p = head, q = *p; q; p = &(q->next), q = q->next)
-    {
-      int r;
-
-      r = grub_strcmp (nitem->name, q->name);
-      if (r < 0)
-       break;
-      if (r > 0)
-       continue;
-
-      if (nitem->prio >= (q->prio & GRUB_PRIO_LIST_PRIO_MASK))
-       {
-         q->prio &= ~GRUB_PRIO_LIST_FLAG_ACTIVE;
-         break;
-       }
-
-      inactive = 1;
-    }
-
-  *p = nitem;
-  nitem->next = q;
-  if (q)
-    q->prev = &nitem->next;
-  nitem->prev = p;
-
-  if (! inactive)
-    nitem->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
-}
index 2a802390fdae28bdfc1e9961a7aa1e19d033cb18..cae78f161e0ba2ca3ec57d5d9d775e2eaa67a85e 100644 (file)
@@ -444,7 +444,7 @@ grub_normal_do_completion (char *buf, int *restore,
       grub_command_t cmd;
       FOR_COMMANDS(cmd)
       {
-       if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
+       if (cmd->prio & GRUB_COMMAND_FLAG_ACTIVE)
          {
            if (add_completion (cmd->name, " ", GRUB_COMPLETION_TYPE_COMMAND))
              goto fail;
index 57c06da4641cb28956a20dd780762b028917177d..6d43499be105a372ad577ae608311af82782269f 100644 (file)
@@ -44,6 +44,9 @@ struct grub_command;
 typedef grub_err_t (*grub_command_func_t) (struct grub_command *cmd,
                                           int argc, char **argv);
 
+#define GRUB_COMMAND_PRIO_MASK 0xff
+#define GRUB_COMMAND_FLAG_ACTIVE       0x100
+
 /* The command description.  */
 struct grub_command
 {
index 54f528a054cc10b11b862c609789033bec096cbf..8b40ca4addd2f29a2789dd89aaefbec994a83a8a 100644 (file)
@@ -102,43 +102,4 @@ void * EXPORT_FUNC(grub_named_list_find) (grub_named_list_t head,
     && GRUB_FIELD_MATCH (*pptr, grub_named_list_t, name))? \
    (grub_named_list_t *) (void *) pptr : (grub_named_list_t *) grub_bad_type_cast ())
 
-#define GRUB_PRIO_LIST_PRIO_MASK       0xff
-#define GRUB_PRIO_LIST_FLAG_ACTIVE     0x100
-
-struct grub_prio_list
-{
-  struct grub_prio_list *next;
-  struct grub_prio_list **prev;
-  char *name;
-  int prio;
-};
-typedef struct grub_prio_list *grub_prio_list_t;
-
-void EXPORT_FUNC(grub_prio_list_insert) (grub_prio_list_t *head,
-                                        grub_prio_list_t item);
-
-static inline void
-grub_prio_list_remove (grub_prio_list_t item)
-{
-  if ((item->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) && (item->next))
-    item->next->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
-  grub_list_remove (GRUB_AS_LIST (item));
-}
-
-#define GRUB_AS_PRIO_LIST(ptr) \
-  ((GRUB_FIELD_MATCH (ptr, grub_prio_list_t, next)  \
-    && GRUB_FIELD_MATCH (ptr, grub_prio_list_t, prev) \
-    && GRUB_FIELD_MATCH (ptr, grub_prio_list_t, name) \
-    && GRUB_FIELD_MATCH (ptr, grub_prio_list_t, prio))? \
-   (grub_prio_list_t) ptr \
-   : (grub_prio_list_t) grub_bad_type_cast ())
-
-#define GRUB_AS_PRIO_LIST_P(pptr) \
-  ((GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, next) \
-    && GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, prev) \
-    && GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, name) \
-    && GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, prio)) ? \
-   (grub_prio_list_t *) (void *) pptr \
-   : (grub_prio_list_t *) grub_bad_type_cast ())
-
 #endif /* ! GRUB_LIST_HEADER */