Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
last version of tesh
[simgrid.git] / tools / tesh2 / src / excludes.c
1 #include <excludes.h>
2 #include <vector.h>
3
4 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
5
6 excludes_t
7 excludes_new(void)
8 {
9         excludes_t excludes = xbt_new0(s_excludes_t, 1);
10         
11         if(!(excludes->items = vector_new(8,NULL)))
12         {
13                 free(excludes);
14                 return NULL;
15         }
16         
17         return excludes;
18 }
19
20 int
21 excludes_is_empty(excludes_t excludes)
22 {
23         if(!excludes)
24         {
25                 errno = EINVAL;
26                 return 0;
27         }
28         
29         return vector_is_empty(excludes->items);
30 }
31
32 int
33 excludes_contains(excludes_t excludes, fstream_t fstream)
34 {
35         fstream_t cur;
36         
37         if(!excludes || !fstream)
38         {
39                 errno = EINVAL;
40                 return 0;
41         }
42                 
43         vector_rewind(excludes->items);
44                 
45         while((cur = vector_get(excludes->items)))
46         {
47                 if(!strcmp(fstream->name, cur->name) && !strcmp(fstream->directory, cur->directory))
48                         return 1;
49                         
50                 vector_move_next(excludes->items);
51         }
52         
53         return 0;
54 }
55
56 int
57 excludes_add(excludes_t excludes, fstream_t fstream)
58 {
59         if(!excludes)
60                 return EINVAL;
61                 
62         if(excludes_contains(excludes, fstream))
63                 return EEXIST;
64                 
65         return vector_push_back(excludes->items, fstream);
66 }
67
68 int
69 excludes_check(excludes_t excludes, fstreams_t fstreams)
70 {
71         fstream_t exclude;
72         fstream_t fstream;
73         int success = 1;
74         int exists;
75         
76         if(!excludes || !fstreams)
77                 return EINVAL;
78                 
79         vector_rewind(excludes->items);
80                 
81         while((exclude = vector_get(excludes->items)))
82         {
83                 vector_rewind(fstreams->items);
84                         
85                 while((fstream = vector_get(fstreams->items)))
86                 {
87                         exists = 0;
88                         
89                         if(!strcmp(fstream->name, exclude->name) && !strcmp(fstream->directory, exclude->directory))
90                         {
91                                 exists = 1;
92                                 break;
93                         }
94                                 
95                         vector_move_next(fstreams->items);
96                 }
97                         
98                 if(!exists)
99                 {
100                         success = 0;
101                         WARN1("cannot exclude the file %s",exclude->name);      
102                 }
103                         
104                 vector_move_next(excludes->items);
105         }
106                 
107         return success;
108 }
109
110 int
111 excludes_free(void** excludesptr)
112 {
113         int rv;
114         
115         if(!(*excludesptr))
116                 return EINVAL;
117                 
118         if((rv =vector_free((&(*((excludes_t*)excludesptr))->items))))
119                 return rv;
120                 
121         free(*excludesptr);
122         *excludesptr = NULL;    
123         
124         return 0;
125 }