1 #include <directory.h>
\r
2 #include <fstreams.h>
\r
5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
\r
8 directory_new(const char* name)
\r
10 directory_t directory;
\r
18 directory = xbt_new0(s_directory_t, 1);
\r
21 directory->name = strdup(name);
\r
24 directory->stream = NULL;
\r
30 directory_open(directory_t directory)
\r
32 if(!directory || directory->stream)
\r
35 if(!(directory->stream = opendir(directory->name)))
\r
43 directory_close(directory_t directory)
\r
48 if(!directory->stream)
\r
51 if(closedir(directory->stream))
\r
54 directory->stream = NULL;
\r
59 directory_load(directory_t directory, fstreams_t fstreams, xbt_dynar_t suffixes)
\r
61 struct dirent* entry ={0};
\r
62 s_fstream_t sfstream = {0};
\r
65 int has_valid_suffix;
\r
69 if(!directory || !fstreams)
\r
72 if(!directory->stream)
\r
75 sfstream.directory = strdup(directory->name);
\r
77 while((entry = readdir(directory->stream)))
\r
79 has_valid_suffix = 0;
\r
81 xbt_dynar_foreach(suffixes, i, suffix)
\r
83 if(!strncmp(suffix, entry->d_name + (strlen(entry->d_name) - strlen(suffix)), strlen(suffix)))
\r
85 has_valid_suffix = 1;
\r
90 if(!has_valid_suffix)
\r
93 sfstream.name = strdup(entry->d_name);
\r
95 /* check first if the file stream is already in the file streams to run */
\r
96 if(fstreams_contains(fstreams, &sfstream))
\r
98 WARN1("file %s already registred", entry->d_name);
\r
99 free(sfstream.name);
\r
103 /* add the fstream to the list of file streams to run */
\r
104 if((rv = fstreams_add(fstreams, fstream_new(directory->name, entry->d_name))))
\r
106 free(sfstream.directory);
\r
107 free(sfstream.name);
\r
112 free(sfstream.name);
\r
116 WARN1("no tesh file found in the directory %s", directory->name);
\r
118 free(sfstream.directory);
\r
125 directory_free(void** directoryptr)
\r
127 directory_t directory;
\r
129 if(!(*directoryptr))
\r
132 directory = *((directory_t*)directoryptr);
\r
134 if(directory->stream)
\r
135 if(directory_close(directory))
\r
138 if(directory->name)
\r
139 free(directory->name);
\r
141 free(*directoryptr);
\r
142 *directoryptr = NULL;
\r
148 directory_get_name(directory_t directory)
\r
156 return (const char*)directory->name;
\r