Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Last corrections of Tesh tool.
[simgrid.git] / tools / tesh2 / src / directories.c
index 83726a7..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_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;
-}
-
-directory_t
-directories_search_fstream_directory(directories_t directories, const char* name)
-{
-       
-       struct stat buffer = {0};
-       char* prev;
-       directory_t directory;
-       
-       if(!directories)
-       {
-               errno = EINVAL;
-               return NULL;
-       }
-       
-       prev = getcwd(NULL, 0);
-       
-       vector_rewind(directories->items);
-       
-       while((directory = vector_get(directories->items)))
-       {
-               chdir(directory->name);
-               
-               if(!stat(name, &buffer) || S_ISREG(buffer.st_mode))
-               {
-                       chdir(prev);
-                       free(prev);
-                       return directory;
-               }
-               
-               vector_move_next(directories->items);
-       }
-       
-       chdir(prev);
-       free(prev);
-       errno = ESRCH;
-       return NULL;    
-}
-
-int
-directories_load(directories_t directories, fstreams_t fstreams, lstrings_t suffixes)
-{
-       directory_t directory;
-       
-       if(!directories || !fstreams || !suffixes)
-               return EINVAL;
-       
-       vector_rewind(directories->items);
-       
-       while((directory = vector_get(directories->items)))
-       {
-               if(directory->load)
-               {
-                       if((errno = directory_open(directory)))
-                               return errno;
-                       
-                       chdir(directory->name);
-                       
-                       if((errno = directory_load(directory, fstreams, suffixes)))
-                               return errno;
-                               
-                       if((errno = directory_close(directory)))
-                               return errno;
-                       
-                       chdir(root_directory->name);
-               }
-                       
-               vector_move_next(directories->items);
-               
-               
-       }
-       
-       return 0;
-}
-
-int
-directories_has_directories_to_load(directories_t directories)
-{
-       directory_t directory;
-       
-       if(!directories)
-       {
-               errno = EINVAL;
-               return 0;
-       }
-       
-       vector_rewind(directories->items);
-       
-       while((directory = vector_get(directories->items)))
-       {
-               if(directory->load)
-                       return 1;
-                       
-               vector_move_next(directories->items);
-               
-       }
-       
-       return 0;
-}
-
-directory_t
-directories_get_back(directories_t directories)
-{
-       if(!directories)
-       {
-               errno = EINVAL;
-               return NULL;
-       }
-       
-       return vector_get_back(directories->items);     
-}
-
-int
-directories_free(void** directoriesptr)
-{
-       if(!(*directoriesptr))
-               return EINVAL;
-               
-       if((errno = vector_free(&((*((directories_t*)directoriesptr))->items))))
-               return errno;
-       
-       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