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>
+
+ 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
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;
+}
};
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)