Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix copyright headers
[simgrid.git] / src / gras / DataDesc / ddt_create.c
index f893efe..2f1158e 100644 (file)
@@ -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);
@@ -632,7 +647,6 @@ gras_datadesc_ref_pop_arr(gras_datadesc_type_t element_type)
  *##
  */
 
-#include "xbt/dynar_private.h"
 static void gras_datadesc_dynar_cb(gras_datadesc_type_t typedesc,
                                    gras_cbps_t vars, void *data)
 {