#endif
/*
- * This is a simple doubly linked list implementation that matches the
+ * This is a simple doubly linked list implementation that matches the
* way the Linux kernel doubly linked list implementation works.
*/
};
+/* Initialise a static list */
+#define YLIST_HEAD(name) \
+struct ylist_head name = { &(name), &(name)}
+
+
+
/* Initialise a list head to an empty list */
#define YINIT_LIST_HEAD(p) \
do { \
- (p)->next = (p);\
- (p)->prev = (p); \
-} while(0)
+ (p)->next = (p);\
+ (p)->prev = (p); \
+} while (0)
/* Add an element to a list */
-static __inline__ void ylist_add(struct ylist_head *newEntry,
- struct ylist_head *list)
+static __inline__ void ylist_add(struct ylist_head *newEntry,
+ struct ylist_head *list)
{
struct ylist_head *listNext = list->next;
-
+
list->next = newEntry;
newEntry->prev = list;
newEntry->next = listNext;
listNext->prev = newEntry;
-
+
+}
+
+static __inline__ void ylist_add_tail(struct ylist_head *newEntry,
+ struct ylist_head *list)
+{
+ struct ylist_head *listPrev = list->prev;
+
+ list->prev = newEntry;
+ newEntry->next = list;
+ newEntry->prev = listPrev;
+ listPrev->next = newEntry;
+
}
{
struct ylist_head *listNext = entry->next;
struct ylist_head *listPrev = entry->prev;
-
+
listNext->prev = listPrev;
listPrev->next = listNext;
-
+
}
static __inline__ void ylist_del_init(struct ylist_head *entry)
/* ylist_entry takes a pointer to a list entry and offsets it to that
* we can find a pointer to the object it is embedded in.
*/
-
-
+
+
#define ylist_entry(entry, type, member) \
((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
*/
#define ylist_for_each(itervar, list) \
- for (itervar = (list)->next; itervar != (list); itervar = itervar->next )
+ for (itervar = (list)->next; itervar != (list); itervar = itervar->next)
-#define ylist_for_each_safe(itervar,saveVar, list) \
- for (itervar = (list)->next, saveVar = (list)->next->next; itervar != (list); \
- itervar = saveVar, saveVar = saveVar->next)
+#define ylist_for_each_safe(itervar, saveVar, list) \
+ for (itervar = (list)->next, saveVar = (list)->next->next; \
+ itervar != (list); itervar = saveVar, saveVar = saveVar->next)
#if !(defined __KERNEL__)
#endif
/*
- * Attribute flags.
+ * Attribute flags. These should be or-ed together to figure out what
+ * has been changed!
*/
#define ATTR_MODE 1
#define ATTR_UID 2
#define ATTR_MTIME 32
#define ATTR_CTIME 64
-
struct iattr {
unsigned int ia_valid;
unsigned ia_mode;
#endif
-
-#define KERN_DEBUG
-
#else
#include <linux/types.h>