git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor: use a more decent physical memory map
[lunaix-os.git]
/
lunaix-os
/
includes
/
lunaix
/
ds
/
llist.h
diff --git
a/lunaix-os/includes/lunaix/ds/llist.h
b/lunaix-os/includes/lunaix/ds/llist.h
index 9af9dd1fba4ebe90fe86090e3e72438492cea95e..ecce44ab332d92af3bed87d0b2fa7957a49b6b1f 100644
(file)
--- a/
lunaix-os/includes/lunaix/ds/llist.h
+++ b/
lunaix-os/includes/lunaix/ds/llist.h
@@
-12,7
+12,7
@@
#ifndef __LUNAIX_LLIST_H
#define __LUNAIX_LLIST_H
#ifndef __LUNAIX_LLIST_H
#define __LUNAIX_LLIST_H
-#include <lunaix/
common
.h>
+#include <lunaix/
types
.h>
struct llist_header
{
struct llist_header
{
@@
-41,13
+41,19
@@
llist_init_head(struct llist_header* head)
static inline void
llist_append(struct llist_header* head, struct llist_header* elem)
{
static inline void
llist_append(struct llist_header* head, struct llist_header* elem)
{
- __llist_add(elem, head
, head->next
);
+ __llist_add(elem, head
->prev, head
);
}
static inline void
llist_prepend(struct llist_header* head, struct llist_header* elem)
{
}
static inline void
llist_prepend(struct llist_header* head, struct llist_header* elem)
{
- __llist_add(elem, head->prev, head);
+ __llist_add(elem, head, head->next);
+}
+
+static inline void
+llist_insert_after(struct llist_header* head, struct llist_header* elem)
+{
+ __llist_add(elem, head, head->next);
}
static inline void
}
static inline void
@@
-67,6
+73,12
@@
llist_empty(struct llist_header* elem)
return elem->next == elem && elem->prev == elem;
}
return elem->next == elem && elem->prev == elem;
}
+#define DEFINE_LLIST(name) \
+ struct llist_header name = (struct llist_header) \
+ { \
+ .prev = &name, .next = &name \
+ }
+
/**
* list_entry - get the struct for this entry
* @ptr: the &struct list_head pointer.
/**
* list_entry - get the struct for this entry
* @ptr: the &struct list_head pointer.
@@
-93,8
+105,10
@@
struct hlist_node
};
static inline void
};
static inline void
-hlist_del(struct hlist_node* node)
+hlist_del
ete
(struct hlist_node* node)
{
{
+ if (!node->pprev)
+ return;
*node->pprev = node->next;
node->next = 0;
node->pprev = 0;
*node->pprev = node->next;
node->next = 0;
node->pprev = 0;