Remove prio_list.
* include/grub/list.h (grub_prio_list): Removed. (GRUB_PRIO_LIST_PRIO_MASK): Removed. All users switched to GRUB_COMMAND_PRIO_MASK. (GRUB_PRIO_LIST_FLAG_ACTIVE): Removed. All users switched to GRUB_COMMAND_FLAG_ACTIVE. (grub_prio_list_insert): Removed. (grub_prio_list_remove): Likewise. (GRUB_AS_PRIO_LIST): Likewise. (GRUB_AS_PRIO_LIST_P): Likewise. * include/grub/command.h (GRUB_COMMAND_PRIO_MASK): New define. (GRUB_COMMAND_FLAG_ACTIVE): Likewise. * grub-core/kern/list.c (grub_prio_list_insert): Remove. * grub-core/kern/command.c (grub_register_command_prio): Inline the prio_list code. (grub_unregister_command): Likewise.
This commit is contained in:
commit
eece3349ea
8 changed files with 61 additions and 83 deletions
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
||||||
|
2012-02-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Remove prio_list.
|
||||||
|
|
||||||
|
* include/grub/list.h (grub_prio_list): Removed.
|
||||||
|
(GRUB_PRIO_LIST_PRIO_MASK): Removed. All users switched to
|
||||||
|
GRUB_COMMAND_PRIO_MASK.
|
||||||
|
(GRUB_PRIO_LIST_FLAG_ACTIVE): Removed. All users switched to
|
||||||
|
GRUB_COMMAND_FLAG_ACTIVE.
|
||||||
|
(grub_prio_list_insert): Removed.
|
||||||
|
(grub_prio_list_remove): Likewise.
|
||||||
|
(GRUB_AS_PRIO_LIST): Likewise.
|
||||||
|
(GRUB_AS_PRIO_LIST_P): Likewise.
|
||||||
|
* include/grub/command.h (GRUB_COMMAND_PRIO_MASK): New define.
|
||||||
|
(GRUB_COMMAND_FLAG_ACTIVE): Likewise.
|
||||||
|
* grub-core/kern/list.c (grub_prio_list_insert): Remove.
|
||||||
|
* grub-core/kern/command.c (grub_register_command_prio): Inline
|
||||||
|
the prio_list code.
|
||||||
|
(grub_unregister_command): Likewise.
|
||||||
|
|
||||||
2012-02-26 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-02-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
Fix interrupt mixup from previous commit.
|
Fix interrupt mixup from previous commit.
|
||||||
|
|
|
@ -40,7 +40,7 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
|
||||||
grub_command_t cmd;
|
grub_command_t cmd;
|
||||||
FOR_COMMANDS(cmd)
|
FOR_COMMANDS(cmd)
|
||||||
{
|
{
|
||||||
if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE))
|
if ((cmd->prio & GRUB_COMMAND_FLAG_ACTIVE))
|
||||||
{
|
{
|
||||||
struct grub_term_output *term;
|
struct grub_term_output *term;
|
||||||
const char *summary_translated = _(cmd->summary);
|
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];
|
currarg = args[i];
|
||||||
FOR_COMMANDS(cmd_iter)
|
FOR_COMMANDS(cmd_iter)
|
||||||
{
|
{
|
||||||
if (!(cmd_iter->prio & GRUB_PRIO_LIST_FLAG_ACTIVE))
|
if (!(cmd_iter->prio & GRUB_COMMAND_FLAG_ACTIVE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (grub_strncmp (cmd_iter->name, currarg,
|
if (grub_strncmp (cmd_iter->name, currarg,
|
||||||
|
|
|
@ -83,8 +83,8 @@ grub_mini_cmd_help (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
|
|
||||||
for (p = grub_command_list; p; p = p->next)
|
for (p = grub_command_list; p; p = p->next)
|
||||||
grub_printf ("%s (%d%c)\t%s\n", p->name,
|
grub_printf ("%s (%d%c)\t%s\n", p->name,
|
||||||
p->prio & GRUB_PRIO_LIST_PRIO_MASK,
|
p->prio & GRUB_COMMAND_PRIO_MASK,
|
||||||
(p->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) ? '+' : '-',
|
(p->prio & GRUB_COMMAND_FLAG_ACTIVE) ? '+' : '-',
|
||||||
p->description);
|
p->description);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -30,6 +30,9 @@ grub_register_command_prio (const char *name,
|
||||||
int prio)
|
int prio)
|
||||||
{
|
{
|
||||||
grub_command_t cmd;
|
grub_command_t cmd;
|
||||||
|
int inactive = 0;
|
||||||
|
|
||||||
|
grub_command_t *p, q;
|
||||||
|
|
||||||
cmd = (grub_command_t) grub_zalloc (sizeof (*cmd));
|
cmd = (grub_command_t) grub_zalloc (sizeof (*cmd));
|
||||||
if (! cmd)
|
if (! cmd)
|
||||||
|
@ -42,9 +45,34 @@ grub_register_command_prio (const char *name,
|
||||||
|
|
||||||
cmd->flags = 0;
|
cmd->flags = 0;
|
||||||
cmd->prio = prio;
|
cmd->prio = prio;
|
||||||
|
|
||||||
|
for (p = &grub_command_list, q = *p; q; p = &(q->next), q = q->next)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
grub_prio_list_insert (GRUB_AS_PRIO_LIST_P (&grub_command_list),
|
r = grub_strcmp (cmd->name, q->name);
|
||||||
GRUB_AS_PRIO_LIST (cmd));
|
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;
|
||||||
|
|
||||||
|
if (! inactive)
|
||||||
|
cmd->prio |= GRUB_COMMAND_FLAG_ACTIVE;
|
||||||
|
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
@ -52,6 +80,8 @@ grub_register_command_prio (const char *name,
|
||||||
void
|
void
|
||||||
grub_unregister_command (grub_command_t cmd)
|
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);
|
grub_free (cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,42 +33,6 @@ grub_named_list_find (grub_named_list_t head, const char *name)
|
||||||
return NULL;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_list_push (grub_list_t *head, grub_list_t item)
|
grub_list_push (grub_list_t *head, grub_list_t item)
|
||||||
{
|
{
|
||||||
|
|
|
@ -444,7 +444,7 @@ grub_normal_do_completion (char *buf, int *restore,
|
||||||
grub_command_t cmd;
|
grub_command_t cmd;
|
||||||
FOR_COMMANDS(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))
|
if (add_completion (cmd->name, " ", GRUB_COMPLETION_TYPE_COMMAND))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -44,6 +44,9 @@ struct grub_command;
|
||||||
typedef grub_err_t (*grub_command_func_t) (struct grub_command *cmd,
|
typedef grub_err_t (*grub_command_func_t) (struct grub_command *cmd,
|
||||||
int argc, char **argv);
|
int argc, char **argv);
|
||||||
|
|
||||||
|
#define GRUB_COMMAND_PRIO_MASK 0xff
|
||||||
|
#define GRUB_COMMAND_FLAG_ACTIVE 0x100
|
||||||
|
|
||||||
/* The command description. */
|
/* The command description. */
|
||||||
struct grub_command
|
struct grub_command
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,43 +84,4 @@ void * EXPORT_FUNC(grub_named_list_find) (grub_named_list_t head,
|
||||||
&& GRUB_FIELD_MATCH (*pptr, grub_named_list_t, name))? \
|
&& GRUB_FIELD_MATCH (*pptr, grub_named_list_t, name))? \
|
||||||
(grub_named_list_t *) (void *) pptr : (grub_named_list_t *) grub_bad_type_cast ())
|
(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 */
|
#endif /* ! GRUB_LIST_HEADER */
|
||||||
|
|
Loading…
Reference in a new issue