Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Last corrections of Tesh tool.
[simgrid.git] / tools / tesh2 / src / directories.c
index 3afc543..3b480b0 100644 (file)
-#include <directories.h>
-#include <directory.h>
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
-
-directories_t
-directories_new(void)
-{
-       directories_t directories = xbt_new0(s_directories_t, 1);
-       
-       if(!(directories->items = vector_new(8, directory_free)))
-       {
-               free(directories);
-               return NULL;
-       }
-       
-       return directories;
-}
-
-int
-directories_get_size(directories_t directories)
-{
-       if(!directories)
-       {
-               errno = EINVAL;
-               return -1;
-       }
-       
-       return vector_get_size(directories->items);
-}
-
-int
-directories_is_empty(directories_t directories)
-{
-       if(!directories)
-       {
-               errno = EINVAL;
-               return -1;
-       }
-       
-       return vector_is_empty(directories->items);
-}
-
-int
-directories_add(directories_t directories, directory_t directory)
-{
-       directory_t cur;
-       
-       if(!directories)
-               return EINVAL;
-       
-       vector_rewind(directories->items);
-       
-       while((cur = vector_get(directories->items)))
-       {
-               if(!strcmp(cur->name, directory->name))
-                       return EEXIST;
-               
-               vector_move_next(directories->items);
-       }
-       
-       return vector_push_back(directories->items, directory);
-}
-
-int
-directories_contains(directories_t directories, directory_t directory)
-{
-       directory_t cur;
-       
-       if(!directories)
-               return EINVAL;
-       
-       vector_rewind(directories->items);
-       
-       while((cur = vector_get(directories->items)))
-       {
-               if(!strcmp(cur->name, directory->name))
-                       return 1;
-               
-               vector_move_next(directories->items);
-       }
-       
-       return 0;
-}
-
-int
-directories_load(directories_t directories, fstreams_t fstreams, lstrings_t suffixes)
-{
-       directory_t directory;
-       int rv;
-       
-       if(!directories || !fstreams || !suffixes)
-               return EINVAL;
-       
-       vector_rewind(directories->items);
-       
-       while((directory = vector_get(directories->items)))
-       {
-               if((rv = directory_open(directory)))
-                       return rv;
-               
-               if((rv = directory_load(directory, fstreams, suffixes)))
-                       return rv;
-                       
-               if((rv = directory_close(directory)))
-                       return rv;
-                       
-               vector_move_next(directories->items);
-               
-               
-       }
-       
-       return 0;
-}
-
-int
-directories_free(void** directoriesptr)
-{
-       int rv;
-       
-       if(!(*directoriesptr))
-               return EINVAL;
-               
-       if((rv = vector_free(&((*((directories_t*)directoriesptr))->items))))
-               return rv;
-       
-       free(*directoriesptr);
-       *directoriesptr = NULL;
-       
-       return 0;       
-       
-}
+#include <directories.h>\r
+#include <directory.h>\r
+\r
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
+\r
+directories_t\r
+directories_new(void)\r
+{\r
+       directories_t directories = xbt_new0(s_directories_t, 1);\r
+       \r
+       directories->items = xbt_dynar_new(sizeof(directory_t), (void_f_pvoid_t)directory_free);\r
+       \r
+       return directories;\r
+}\r
+\r
+int\r
+directories_get_size(directories_t directories)\r
+{\r
+       if(!directories)\r
+       {\r
+               errno = EINVAL;\r
+               return -1;\r
+       }\r
+\r
+       return xbt_dynar_length(directories->items);\r
+}\r
+\r
+int\r
+directories_is_empty(directories_t directories)\r
+{\r
+       if(!directories)\r
+       {\r
+               errno = EINVAL;\r
+               return -1;\r
+       }\r
+\r
+       return (0 == xbt_dynar_length(directories->items));\r
+}\r
+\r
+int\r
+directories_add(directories_t directories, directory_t directory)\r
+{\r
+       directory_t cur;\r
+       unsigned int i;\r
+       \r
+       if(!directories)\r
+               return EINVAL;\r
+       \r
+       xbt_dynar_foreach(directories->items, i, cur)\r
+       {\r
+               if(!strcmp(cur->name, directory->name))\r
+                       return EEXIST;\r
+       }\r
+\r
+       xbt_dynar_push(directories->items, &directory);\r
+\r
+       return 0;\r
+}\r
+\r
+int\r
+directories_contains(directories_t directories, directory_t directory)\r
+{\r
+       directory_t* cur;\r
+       unsigned int i;\r
+       \r
+       if(!directories)\r
+               return EINVAL;\r
+\r
+       xbt_dynar_foreach(directories->items, i, cur)\r
+       {\r
+               if(!strcmp((*cur)->name, directory->name))\r
+                       return 1;\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+int\r
+directories_load(directories_t directories, fstreams_t fstreams, xbt_dynar_t suffixes)\r
+{\r
+       directory_t directory;\r
+       int rv;\r
+       unsigned int i;\r
+       \r
+       if(!directories || !fstreams || !suffixes)\r
+               return EINVAL;\r
+       \r
+       xbt_dynar_foreach(directories->items, i, directory)\r
+       {\r
+               if((rv = directory_open(directory)))\r
+                       return rv;\r
+               \r
+               if((rv = directory_load(directory, fstreams, suffixes)))\r
+                       return rv;\r
+                       \r
+               if((rv = directory_close(directory)))\r
+                       return rv;\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+int\r
+directories_free(void** directoriesptr)\r
+{\r
+       directories_t directories;\r
+       \r
+       if(!(*directoriesptr))\r
+               return EINVAL;\r
+\r
+       directories = (directories_t)(*directoriesptr);\r
+       \r
+       if(directories->items)\r
+               xbt_dynar_free(&(directories->items));\r
+       \r
+       free(*directoriesptr);\r
+       *directoriesptr = NULL;\r
+       \r
+       return 0;       \r
+}\r