[DRBD-cvs] user by lars; back to single linked list, but keep FIF...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Mon, 5 Apr 2004 13:47:06 +0200 (CEST)


DRBD CVS committal

Author  : lars
Project : drbd
Module  : user

Dir     : drbd/user


Modified Files:
      Tag: rel-0_7-branch
	Makefile drbdadm.h drbdadm_main.c drbdadm_parser.y 


Log Message:
back to single linked list, but keep FIFO order for options
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Makefile,v
retrieving revision 1.7.2.14
retrieving revision 1.7.2.15
diff -u -3 -r1.7.2.14 -r1.7.2.15
--- Makefile	24 Mar 2004 13:14:07 -0000	1.7.2.14
+++ Makefile	5 Apr 2004 11:47:01 -0000	1.7.2.15
@@ -35,6 +35,8 @@
 drbdadm_parser.c: drbdadm_parser.y
 	bison -d -o drbdadm_parser.c drbdadm_parser.y
 
+drbdadm_parser.y: drbdadm.h
+
 drbdsetup: drbdsetup.o
 	$(CC) -o drbdsetup drbdsetup.o
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm.h,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -u -3 -r1.1.2.19 -r1.1.2.20
--- drbdadm.h	1 Apr 2004 07:25:28 -0000	1.1.2.19
+++ drbdadm.h	5 Apr 2004 11:47:01 -0000	1.1.2.20
@@ -40,7 +40,6 @@
   struct d_option* sync_options;
   struct d_option* startup_options;
   struct d_resource* next;
-  struct d_resource* prev;
 };
 
 extern int adm_attach(struct d_resource* ,char* );
@@ -79,9 +78,10 @@
 #define ssprintf(ptr,...) \
   ptr=strcpy(alloca(snprintf(ss_buffer,255,##__VA_ARGS__)+1),ss_buffer)
 
-#define for_each_resource(res,tmp,config)                 \
-	for (res = (config), tmp = 0;                     \
-	     ({ tmp != (config) && (tmp = res->next); }); \
+/* CAUTION: arguments may not have side effects! */
+#define for_each_resource(res,tmp,config) \
+	for (res = (config), tmp = 0;     \
+	     tmp = res? res->next : NULL, res != NULL;\
 	     res = tmp)
 
 #endif
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_main.c,v
retrieving revision 1.1.2.40
retrieving revision 1.1.2.41
diff -u -3 -r1.1.2.40 -r1.1.2.41
--- drbdadm_main.c	3 Apr 2004 11:16:08 -0000	1.1.2.40
+++ drbdadm_main.c	5 Apr 2004 11:47:01 -0000	1.1.2.41
@@ -684,7 +684,7 @@
   { // check uniqueness of resource names.
     struct d_resource *res2,*tmp2;
     char *name;
-    
+
     for_each_resource(res,tmp,config) {
       name = res->name;
       for_each_resource(res2,tmp2,config) {
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_parser.y,v
retrieving revision 1.1.2.20
retrieving revision 1.1.2.21
diff -u -3 -r1.1.2.20 -r1.1.2.21
--- drbdadm_parser.y	11 Feb 2004 13:25:20 -0000	1.1.2.20
+++ drbdadm_parser.y	5 Apr 2004 11:47:01 -0000	1.1.2.21
@@ -10,7 +10,18 @@
 extern void yyerror(char* text);
 extern int yylex();
 
-#define APPEND(LIST,ITEM)   (ITEM); ((ITEM)->next=(LIST))
+#define APPEND(LIST,ITEM) ({                  \
+  typeof((LIST)) _l = (LIST);                 \
+  typeof((ITEM)) _i = (ITEM);                 \
+  typeof((ITEM)) _t;                          \
+  _i->next = NULL;                            \
+  if (_l == NULL) { _l = _i; }                \
+  else {                                      \
+    for (_t = _l; _t->next; _t = _t->next);   \
+    _t->next = _i;                            \
+  };                                          \
+  _l;                                         \
+})
 
 static struct d_resource* c_res;
 static struct d_host_info* c_host;
@@ -77,7 +88,7 @@
   struct d_resource* res;
   res=calloc(1,sizeof(struct d_resource));
   res->name=name;
-  res->next = res->prev = res;
+  res->next = NULL;
 
   return res;
 }
@@ -127,16 +138,7 @@
                 ;
 
 resources:        /* empty */   { $$ = 0; }
-		| resources resource   {
-			if($1) {
-				$2->next = $1;
-				$2->prev = $1->prev;
-				$1->prev->next = $2;
-				$1->prev = $2;
-				$$ = $1;
-			} else
-				$$ = $2;
-		  }
+		| resources resource   { $$=APPEND($1,$2); }
 		;
 
 resource:	  TK_RESOURCE TK_STRING { c_res = new_resource($2); }