1 /* list.c - grub list function */
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2009 Free Software Foundation, Inc.
6 * GRUB is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GRUB is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
20 #include <grub/list.h>
21 #include <grub/misc.h>
24 grub_list_push (grub_list_t
*head
, grub_list_t item
)
31 grub_list_pop (grub_list_t
*head
)
43 grub_list_remove (grub_list_t
*head
, grub_list_t item
)
47 for (p
= head
, q
= *p
; q
; p
= &(q
->next
), q
= q
->next
)
56 grub_list_iterate (grub_list_t head
, grub_list_hook_t hook
)
60 for (p
= head
; p
; p
= p
->next
)
68 grub_list_insert (grub_list_t
*head
, grub_list_t item
,
69 grub_list_test_t test
)
73 for (p
= head
, q
= *p
; q
; p
= &(q
->next
), q
= q
->next
)
82 grub_named_list_find (grub_named_list_t head
, const char *name
)
84 grub_named_list_t result
= 0;
86 auto int list_find (grub_named_list_t item
);
87 int list_find (grub_named_list_t item
)
89 if (! grub_strcmp (item
->name
, name
))
98 grub_list_iterate (GRUB_AS_LIST (head
), (grub_list_hook_t
) list_find
);
103 grub_prio_list_insert (grub_prio_list_t
*head
, grub_prio_list_t nitem
)
107 auto int test (grub_prio_list_t new_item
, grub_prio_list_t item
);
108 int test (grub_prio_list_t new_item
, grub_prio_list_t item
)
112 r
= grub_strcmp (new_item
->name
, item
->name
);
116 if (new_item
->prio
>= (item
->prio
& GRUB_PRIO_LIST_PRIO_MASK
))
118 item
->prio
&= ~GRUB_PRIO_LIST_FLAG_ACTIVE
;
126 grub_list_insert (GRUB_AS_LIST_P (head
), GRUB_AS_LIST (nitem
),
127 (grub_list_test_t
) test
);
129 nitem
->prio
|= GRUB_PRIO_LIST_FLAG_ACTIVE
;