From: alegrand Date: Sat, 20 Nov 2004 00:11:47 +0000 (+0000) Subject: Bug fix and add a xbt_swag_foreach_safe where you can remove objects from X-Git-Tag: v3.3~4830 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/91f0f8acd7bb93039252812ab45521b948ff50f4 Bug fix and add a xbt_swag_foreach_safe where you can remove objects from the swag while going through it. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@520 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/include/xbt/swag.h b/include/xbt/swag.h index d4533a0684..5af75a74e6 100644 --- a/include/xbt/swag.h +++ b/include/xbt/swag.h @@ -46,3 +46,12 @@ static __inline__ void *xbt_swag_getFirst(xbt_swag_t swag) for((obj)=xbt_swag_getFirst((swag)); \ (obj)!=NULL; \ (obj)=xbt_swag_getNext((obj),(swag)->offset)) + +#define xbt_swag_foreach_safe(obj,obj_next,swag) \ + for((obj)=xbt_swag_getFirst((swag)), \ + ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ + (obj_next=NULL)); \ + (obj)!=NULL; \ + (obj)=obj_next, \ + ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ + (obj_next=NULL)) ) diff --git a/src/xbt/swag.c b/src/xbt/swag.c index dc09977550..42e70fd10d 100644 --- a/src/xbt/swag.c +++ b/src/xbt/swag.c @@ -57,7 +57,7 @@ void *xbt_swag_extract(void *obj, xbt_swag_t swag) { size_t offset = swag->offset; - if (!obj) + if ((!obj) || (!swag)) return NULL; if(!xbt_swag_belongs(obj, swag)) /* Trying to remove an object that was not in this swag */