* grub-core/kern/env.c, include/grub/env.h: Change iterator through

all vars to a macro. All users updated.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-03-03 01:34:27 +01:00
parent e42b251403
commit 3188131f72
7 changed files with 126 additions and 166 deletions

View file

@ -166,11 +166,10 @@ grub_env_unset (const char *name)
grub_free (var);
}
void
grub_env_iterate (int (*func) (struct grub_env_var *var))
struct grub_env_var *
grub_env_update_get_sorted (void)
{
struct grub_env_sorted_var *sorted_list = 0;
struct grub_env_sorted_var *sorted_var;
struct grub_env_var *sorted_list = 0;
int i;
/* Add variables associated with this context into a sorted list. */
@ -180,40 +179,20 @@ grub_env_iterate (int (*func) (struct grub_env_var *var))
for (var = grub_current_context->vars[i]; var; var = var->next)
{
struct grub_env_sorted_var *p, **q;
struct grub_env_var *p, **q;
sorted_var = grub_malloc (sizeof (*sorted_var));
if (! sorted_var)
goto fail;
sorted_var->var = var;
for (q = &sorted_list, p = *q; p; q = &((*q)->next), p = *q)
for (q = &sorted_list, p = *q; p; q = &((*q)->sorted_next), p = *q)
{
if (grub_strcmp (p->var->name, var->name) > 0)
if (grub_strcmp (p->name, var->name) > 0)
break;
}
sorted_var->next = *q;
*q = sorted_var;
var->sorted_next = *q;
*q = var;
}
}
/* Iterate FUNC on the sorted list. */
for (sorted_var = sorted_list; sorted_var; sorted_var = sorted_var->next)
if (func (sorted_var->var))
break;
fail:
/* Free the sorted list. */
for (sorted_var = sorted_list; sorted_var; )
{
struct grub_env_sorted_var *tmp = sorted_var->next;
grub_free (sorted_var);
sorted_var = tmp;
}
return sorted_list;
}
grub_err_t