X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a45aaae8ebc4570ee3d14f2c4bfe2d6bc3aa177e..6760cb07d6b57be16928d95339d71e57c4e24f36:/src/gras/DataDesc/ddt_create.c diff --git a/src/gras/DataDesc/ddt_create.c b/src/gras/DataDesc/ddt_create.c index 7cfff636fb..2f1158ebaf 100644 --- a/src/gras/DataDesc/ddt_create.c +++ b/src/gras/DataDesc/ddt_create.c @@ -1,8 +1,7 @@ -/* $Id$ */ - /* ddt_new - creation/deletion of datatypes structs (private to this module)*/ -/* Copyright (c) 2003-2009 The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004, 2005, 2006, 2007, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -611,14 +610,30 @@ gras_datadesc_type_t gras_datadesc_ref_pop_arr(gras_datadesc_type_t element_type) { - gras_datadesc_type_t res; + gras_datadesc_type_t res,ddt2; char *name = (char *) xbt_malloc(strlen(element_type->name) + 4); sprintf(name, "%s[]", element_type->name); + /* Make sure we are not trying to redefine a ddt with the same name */ + ddt2 = gras_datadesc_by_name_or_null(name); + int cpt=0; + while (ddt2) { + free(name); + name=bprintf("%s[]_%d",element_type->name,cpt++); + ddt2=gras_datadesc_by_name_or_null(name); + } res = gras_datadesc_array_dyn(name, element_type, gras_datadesc_cb_pop); sprintf(name, "%s[]*", element_type->name); + cpt=0; + ddt2 = gras_datadesc_by_name_or_null(name); + while (ddt2) { + free(name); + name=bprintf("%s[]*_%d",element_type->name,cpt++); + ddt2=gras_datadesc_by_name_or_null(name); + } + res = gras_datadesc_ref(name, res); free(name);