[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] device-mapper ./WHATS_NEW include/list.h



CVSROOT:	/cvs/dm
Module name:	device-mapper
Changes by:	agk sourceware org	2008-06-08 14:53:51

Modified files:
	.              : WHATS_NEW 
	include        : list.h 

Log message:
	bring list.h into line with lvm2

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/WHATS_NEW.diff?cvsroot=dm&r1=1.239&r2=1.240
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/include/list.h.diff?cvsroot=dm&r1=1.6&r2=1.7

--- device-mapper/WHATS_NEW	2008/06/06 20:45:41	1.239
+++ device-mapper/WHATS_NEW	2008/06/08 14:53:51	1.240
@@ -1,7 +1,7 @@
 Version 1.02.27 -
 ===============================
   Remove --enable-jobs from configure. (Set at runtime instead.)
-  Bring configure.in into line with the lvm2 version.
+  Bring configure.in and list.h into line with the lvm2 versions.
 
 Version 1.02.26 - 6th June 2008
 ===============================
--- device-mapper/include/list.h	2007/08/21 16:26:06	1.6
+++ device-mapper/include/list.h	2008/06/08 14:53:51	1.7
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
  *
  * This file is part of the device-mapper userspace tools.
  *
@@ -81,9 +81,18 @@
 }
 
 /*
+ * Remove an element from existing list and insert before 'head'.
+ */
+static inline void list_move(struct list *head, struct list *elem)
+{
+	list_del(elem);
+	list_add(head, elem);
+}
+
+/*
  * Is the list empty?
  */
-static inline int list_empty(struct list *head)
+static inline int list_empty(const struct list *head)
 {
 	return head->n == head;
 }
@@ -91,7 +100,7 @@
 /*
  * Is this the first element of the list?
  */
-static inline int list_start(struct list *head, struct list *elem)
+static inline int list_start(const struct list *head, const struct list *elem)
 {
 	return elem->p == head;
 }
@@ -99,7 +108,7 @@
 /*
  * Is this the last element of the list?
  */
-static inline int list_end(struct list *head, struct list *elem)
+static inline int list_end(const struct list *head, const struct list *elem)
 {
 	return elem->n == head;
 }
@@ -107,7 +116,7 @@
 /*
  * Return first element of the list or NULL if empty
  */
-static inline struct list *list_first(struct list *head)
+static inline struct list *list_first(const struct list *head)
 {
 	return (list_empty(head) ? NULL : head->n);
 }
@@ -115,7 +124,7 @@
 /*
  * Return last element of the list or NULL if empty
  */
-static inline struct list *list_last(struct list *head)
+static inline struct list *list_last(const struct list *head)
 {
 	return (list_empty(head) ? NULL : head->p);
 }
@@ -123,7 +132,7 @@
 /*
  * Return the previous element of the list, or NULL if we've reached the start.
  */
-static inline struct list *list_prev(struct list *head, struct list *elem)
+static inline struct list *list_prev(const struct list *head, const struct list *elem)
 {
 	return (list_start(head, elem) ? NULL : elem->p);
 }
@@ -131,7 +140,7 @@
 /*
  * Return the next element of the list, or NULL if we've reached the end.
  */
-static inline struct list *list_next(struct list *head, struct list *elem)
+static inline struct list *list_next(const struct list *head, const struct list *elem)
 {
 	return (list_end(head, elem) ? NULL : elem->n);
 }
@@ -204,6 +213,26 @@
 #define list_iterate_items(v, head) list_iterate_items_gen(v, (head), list)
 
 /*
+ * Walk a list, setting 'v' in turn to the containing structure of each item.
+ * The containing structure should be the same type as 'v'.
+ * The 'struct list' variable within the containing structure is 'field'.
+ * t must be defined as a temporary variable of the same type as v.
+ */
+#define list_iterate_items_gen_safe(v, t, head, field) \
+	for (v = list_struct_base((head)->n, typeof(*v), field), \
+	     t = list_struct_base(v->field.n, typeof(*v), field); \
+	     &v->field != (head); \
+	     v = t, t = list_struct_base(v->field.n, typeof(*v), field))
+/*
+ * Walk a list, setting 'v' in turn to the containing structure of each item.
+ * The containing structure should be the same type as 'v'.
+ * The list should be 'struct list list' within the containing structure.
+ * t must be defined as a temporary variable of the same type as v.
+ */
+#define list_iterate_items_safe(v, t, head) \
+	list_iterate_items_gen_safe(v, t, (head), list)
+
+/*
  * Walk a list backwards, setting 'v' in turn to the containing structure 
  * of each item.
  * The containing structure should be the same type as 'v'.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]