Logo AND Algorithmique Numérique Distribuée

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