1 #include <directories.h>
4 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
9 directories_t directories = xbt_new0(s_directories_t, 1);
11 if(!(directories->items = vector_new(8, directory_free)))
21 directories_get_size(directories_t directories)
29 return vector_get_size(directories->items);
33 directories_add(directories_t directories, directory_t directory)
40 vector_rewind(directories->items);
42 while((cur = vector_get(directories->items)))
44 if(!strcmp(cur->name, directory->name))
47 vector_move_next(directories->items);
50 return vector_push_back(directories->items, directory);
54 directories_contains(directories_t directories, directory_t directory)
61 vector_rewind(directories->items);
63 while((cur = vector_get(directories->items)))
65 if(!strcmp(cur->name, directory->name))
68 vector_move_next(directories->items);
75 directories_search_fstream_directory(directories_t directories, const char* name)
78 struct stat buffer = {0};
80 directory_t directory;
88 prev = getcwd(NULL, 0);
90 vector_rewind(directories->items);
92 while((directory = vector_get(directories->items)))
94 chdir(directory->name);
96 if(!stat(name, &buffer) || S_ISREG(buffer.st_mode))
103 vector_move_next(directories->items);
113 directories_load(directories_t directories, fstreams_t fstreams, lstrings_t suffixes)
115 directory_t directory;
117 if(!directories || !fstreams || !suffixes)
120 vector_rewind(directories->items);
122 while((directory = vector_get(directories->items)))
126 if((errno = directory_open(directory)))
129 chdir(directory->name);
131 if((errno = directory_load(directory, fstreams, suffixes)))
134 if((errno = directory_close(directory)))
137 chdir(root_directory->name);
140 vector_move_next(directories->items);
149 directories_has_directories_to_load(directories_t directories)
151 directory_t directory;
159 vector_rewind(directories->items);
161 while((directory = vector_get(directories->items)))
166 vector_move_next(directories->items);
174 directories_get_back(directories_t directories)
182 return vector_get_back(directories->items);
186 directories_free(void** directoriesptr)
188 if(!(*directoriesptr))
191 if((errno = vector_free(&((*((directories_t*)directoriesptr))->items))))
194 free(*directoriesptr);
195 *directoriesptr = NULL;