Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Propagate file renaming to windows
[simgrid.git] / tools / tesh2 / src / directories.c
1 #include <directories.h>
2 #include <directory.h>
3
4 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
5
6 directories_t
7 directories_new(void)
8 {
9         directories_t directories = xbt_new0(s_directories_t, 1);
10         
11         if(!(directories->items = vector_new(8, directory_free)))
12         {
13                 free(directories);
14                 return NULL;
15         }
16         
17         return directories;
18 }
19
20 int
21 directories_get_size(directories_t directories)
22 {
23         if(!directories)
24         {
25                 errno = EINVAL;
26                 return -1;
27         }
28         
29         return vector_get_size(directories->items);
30 }
31
32 int
33 directories_is_empty(directories_t directories)
34 {
35         if(!directories)
36         {
37                 errno = EINVAL;
38                 return -1;
39         }
40         
41         return vector_is_empty(directories->items);
42 }
43
44 int
45 directories_add(directories_t directories, directory_t directory)
46 {
47         directory_t cur;
48         
49         if(!directories)
50                 return EINVAL;
51         
52         vector_rewind(directories->items);
53         
54         while((cur = vector_get(directories->items)))
55         {
56                 if(!strcmp(cur->name, directory->name))
57                         return EEXIST;
58                 
59                 vector_move_next(directories->items);
60         }
61         
62         return vector_push_back(directories->items, directory);
63 }
64
65 int
66 directories_contains(directories_t directories, directory_t directory)
67 {
68         directory_t cur;
69         
70         if(!directories)
71                 return EINVAL;
72         
73         vector_rewind(directories->items);
74         
75         while((cur = vector_get(directories->items)))
76         {
77                 if(!strcmp(cur->name, directory->name))
78                         return 1;
79                 
80                 vector_move_next(directories->items);
81         }
82         
83         return 0;
84 }
85
86 int
87 directories_load(directories_t directories, fstreams_t fstreams, lstrings_t suffixes)
88 {
89         directory_t directory;
90         int rv;
91         
92         if(!directories || !fstreams || !suffixes)
93                 return EINVAL;
94         
95         vector_rewind(directories->items);
96         
97         while((directory = vector_get(directories->items)))
98         {
99                 if((rv = directory_open(directory)))
100                         return rv;
101                 
102                 if((rv = directory_load(directory, fstreams, suffixes)))
103                         return rv;
104                         
105                 if((rv = directory_close(directory)))
106                         return rv;
107                         
108                 vector_move_next(directories->items);
109                 
110                 
111         }
112         
113         return 0;
114 }
115
116 int
117 directories_free(void** directoriesptr)
118 {
119         int rv;
120         
121         if(!(*directoriesptr))
122                 return EINVAL;
123                 
124         if((rv = vector_free(&((*((directories_t*)directoriesptr))->items))))
125                 return rv;
126         
127         free(*directoriesptr);
128         *directoriesptr = NULL;
129         
130         return 0;       
131         
132 }