X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/44723299849907b8923bfac8f9b111bcc07f0987..f90ef00fd79ef42e4ef8f69b3b69457750173551:/src/gras/DataDesc/ddt_create.c diff --git a/src/gras/DataDesc/ddt_create.c b/src/gras/DataDesc/ddt_create.c index 7cfff636fb..f1e6a5b165 100644 --- a/src/gras/DataDesc/ddt_create.c +++ b/src/gras/DataDesc/ddt_create.c @@ -611,14 +611,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);