1 #include <directory.h>
\r
2 #include <fstreams.h>
\r
4 \r XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
5 \r\rdirectory_t
\r directory_new(const char *name)
\r
7 \rdirectory_t directory;
13 \r\rdirectory = xbt_new0(s_directory_t, 1);
14 \r\r\rdirectory->name = strdup(name);
15 \r\r\rdirectory->stream = NULL;
19 \r\rint
\r directory_open(directory_t directory)
\r
21 \rif (!directory || directory->stream)
23 \r\rif (!(directory->stream = opendir(directory->name)))
28 \r\r\rint
\r directory_close(directory_t directory)
\r
32 \r\rif (!directory->stream)
34 \r\rif (closedir(directory->stream))
36 \r\rdirectory->stream = NULL;
41 directory_load(directory_t directory, fstreams_t fstreams,
42 xbt_dynar_t suffixes)
\r
44 \rstruct dirent *entry = { 0 };
45 \rs_fstream_t sfstream = {
49 \rint has_valid_suffix;
52 \r\rif (!directory || !fstreams)
54 \r\rif (!directory->stream)
56 \r\rsfstream.directory = strdup(directory->name);
57 \r\rwhile ((entry = readdir(directory->stream)))
59 \rhas_valid_suffix = 0;
60 \r\rxbt_dynar_foreach(suffixes, i, suffix)
\r {
63 entry->d_name + (strlen(entry->d_name) - strlen(suffix)),
66 \rhas_valid_suffix = 1;
70 \r\rif (!has_valid_suffix)
72 \r\rsfstream.name = strdup(entry->d_name);
74 /* check first if the file stream is already in the file streams to run */
\r
75 if (fstreams_contains(fstreams, &sfstream))
77 \rWARN1("file %s already registred", entry->d_name);
78 \rfree(sfstream.name);
82 /* add the fstream to the list of file streams to run */
\r
84 fstreams_add(fstreams,
85 fstream_new(directory->name, entry->d_name))))
87 \rfree(sfstream.directory);
88 \rfree(sfstream.name);
92 \rfree(sfstream.name);
95 \rWARN1("no tesh file found in the directory %s", directory->name);
96 \r\rfree(sfstream.directory);
100 \r\rint
\r directory_free(void **directoryptr)
\r
102 \rdirectory_t directory;
103 \r\rif (!(*directoryptr))
105 \r\rdirectory = *((directory_t *) directoryptr);
106 \r\rif (directory->stream)
107 \rif (directory_close(directory))
109 \r\rif (directory->name)
110 \rfree(directory->name);
111 \r\rfree(*directoryptr);
112 \r*directoryptr = NULL;
116 \r\rconst char *
\r directory_get_name(directory_t directory)
\r
123 \r\rreturn (const char *) directory->name;