Make list_push and list_remove functions rather than inline functions
to decrease size and avoid aliasing violations. * include/grub/list.h (grub_list_push): Move to ... * grub-core/kern/list.c (grub_list_push): ... here. Don't inline. * include/grub/list.h (grub_list_remove): Move to ... * grub-core/kern/list.c (grub_list_remove): ... here. Don't inline.
This commit is contained in:
parent
9d369087a9
commit
b00d7fb6c5
3 changed files with 33 additions and 20 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2012-02-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
Make list_push and list_remove functions rather than inline functions
|
||||
to decrease size and avoid aliasing violations.
|
||||
|
||||
* include/grub/list.h (grub_list_push): Move to ...
|
||||
* grub-core/kern/list.c (grub_list_push): ... here. Don't inline.
|
||||
* include/grub/list.h (grub_list_remove): Move to ...
|
||||
* grub-core/kern/list.c (grub_list_remove): ... here. Don't inline.
|
||||
|
||||
2012-02-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
* configure.ac: Disable for now -Wstack-protector, -Wunreachable-code
|
||||
|
|
|
@ -68,3 +68,24 @@ grub_prio_list_insert (grub_prio_list_t *head, grub_prio_list_t nitem)
|
|||
if (! inactive)
|
||||
nitem->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
|
||||
}
|
||||
|
||||
void
|
||||
grub_list_push (grub_list_t *head, grub_list_t item)
|
||||
{
|
||||
item->prev = head;
|
||||
if (*head)
|
||||
(*head)->prev = &item->next;
|
||||
item->next = *head;
|
||||
*head = item;
|
||||
}
|
||||
|
||||
void
|
||||
grub_list_remove (grub_list_t item)
|
||||
{
|
||||
if (item->prev)
|
||||
*item->prev = item->next;
|
||||
if (item->next)
|
||||
item->next->prev = item->prev;
|
||||
item->next = 0;
|
||||
item->prev = 0;
|
||||
}
|
||||
|
|
|
@ -31,26 +31,8 @@ struct grub_list
|
|||
};
|
||||
typedef struct grub_list *grub_list_t;
|
||||
|
||||
static inline void
|
||||
grub_list_push (grub_list_t *head, grub_list_t item)
|
||||
{
|
||||
item->prev = head;
|
||||
if (*head)
|
||||
(*head)->prev = &item->next;
|
||||
item->next = *head;
|
||||
*head = item;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_list_remove (grub_list_t item)
|
||||
{
|
||||
if (item->prev)
|
||||
*item->prev = item->next;
|
||||
if (item->next)
|
||||
item->next->prev = item->prev;
|
||||
item->next = 0;
|
||||
item->prev = 0;
|
||||
}
|
||||
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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue