Logo AND Algorithmique Numérique Distribuée

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