5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
8 directory_new(const char* name, int load)
10 directory_t directory;
11 struct stat buffer = {0};
19 if(stat(name, &buffer))
22 if(!S_ISDIR(buffer.st_mode))
28 directory = xbt_new0(s_directory_t, 1);
32 directory->name = getcwd(NULL, 0);
34 else if(!strcmp("..",name))
36 char* buffer = getcwd(NULL, 0);
38 directory->name = getcwd(NULL, 0);
44 directory->name = strdup(name);
48 directory->stream = NULL;
49 directory->load = load;
55 directory_open(directory_t directory)
57 if(!directory || directory->stream)
60 if(!(directory->stream = opendir(directory->name)))
68 directory_close(directory_t directory)
73 if(!directory->stream)
76 if(closedir(directory->stream))
79 directory->stream = NULL;
84 directory_load(directory_t directory, fstreams_t fstreams, lstrings_t suffixes)
86 struct dirent* entry ={0};
87 s_fstream_t sfstream = {0};
92 if(!directory || !fstreams)
95 if(!directory->stream)
98 sfstream.directory = strdup(directory->name);
100 while((entry = readdir(directory->stream)))
102 has_valid_suffix = 0;
104 lstrings_rewind(suffixes);
106 while((suffix = lstrings_get(suffixes)))
108 if(!strncmp(suffix, entry->d_name + (strlen(entry->d_name) - strlen(suffix)), strlen(suffix)))
110 has_valid_suffix = 1;
114 lstrings_move_next(suffixes);
117 if(!has_valid_suffix)
120 sfstream.name = strdup(entry->d_name);
122 /* check first if the file stream is already in the file streams to run */
123 if(fstreams_contains(fstreams, &sfstream))
125 WARN1("file %s already registred", entry->d_name);
130 /* add the fstream to the list of file streams to run */
131 if((errno = fstreams_add(fstreams, fstream_new(directory->name, entry->d_name))))
133 INFO0("fstreams_add() failed");
134 free(sfstream.directory);
144 WARN1("no tesh file found in the directory %s", directory->name);
146 free(sfstream.directory);
153 directory_free(void** directoryptr)
155 directory_t directory;
160 directory = *((directory_t*)directoryptr);
162 if(directory->stream)
163 if(directory_close(directory))
166 free(directory->name);
169 *directoryptr = NULL;
175 directory_get_name(directory_t directory)
183 return (const char*)directory->name;