Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
some new files used to check Tesh
[simgrid.git] / tools / tesh2 / src / fstreams.c
1 #include <fstreams.h>\r
2 #include <excludes.h>\r
3 #include <fstream.h>\r
4 \r
5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
6 \r
7 fstreams_t\r
8 fstreams_new(void_f_pvoid_t fn_finalize)\r
9 {\r
10         fstreams_t fstreams = xbt_new0(s_fstreams_t, 1);\r
11         fstreams->items = xbt_dynar_new(sizeof(fstream_t), fn_finalize);\r
12         \r
13         return fstreams;\r
14 }\r
15 \r
16 int\r
17 fstreams_exclude(fstreams_t fstreams, excludes_t excludes)\r
18 {\r
19         fstream_t fstream;\r
20         unsigned int i;\r
21         \r
22         if(!fstreams || !excludes)\r
23                 return EINVAL;\r
24                 \r
25         if(excludes_is_empty(excludes))\r
26                 return 0;\r
27         \r
28         /* collecte the file streams to exclude */\r
29         xbt_dynar_foreach(fstreams->items, i, fstream)\r
30         {\r
31                 if(excludes_contains(excludes, fstream))\r
32                 {\r
33                         INFO1("excluding %s",fstream->name);\r
34                         xbt_dynar_cursor_rm(fstreams->items, &i);\r
35                 }\r
36         }\r
37 \r
38         return 0;\r
39 }\r
40 \r
41 int \r
42 fstreams_contains(fstreams_t fstreams, fstream_t fstream)\r
43 {\r
44         fstream_t cur;\r
45         unsigned int i;\r
46         \r
47         if(!fstreams || !fstream)\r
48         {\r
49                 errno = EINVAL;\r
50                 return 0;\r
51         }\r
52 \r
53         xbt_dynar_foreach(fstreams->items, i, cur)\r
54         {\r
55                 if(!strcmp(cur->name, fstream->name) && !strcmp(cur->directory, fstream->directory))\r
56                         return 1;\r
57         }\r
58         \r
59         return 0;\r
60 }\r
61 \r
62 int\r
63 fstreams_load(fstreams_t fstreams)\r
64 {\r
65         fstream_t fstream;\r
66         unsigned int i;\r
67         \r
68         if(!fstreams )\r
69                 return EINVAL;\r
70 \r
71         xbt_dynar_foreach(fstreams->items, i, fstream)\r
72         {\r
73                 fstream_open(fstream);\r
74         }\r
75         \r
76         \r
77         return 0;\r
78 }\r
79 \r
80 int\r
81 fstreams_add(fstreams_t fstreams, fstream_t fstream)\r
82 {\r
83         if(!fstreams)\r
84                 return EINVAL;\r
85 \r
86         xbt_dynar_push(fstreams->items, &fstream);\r
87         \r
88         return 0;\r
89 }\r
90 \r
91 int\r
92 fstreams_free(void** fstreamsptr)\r
93 {\r
94         if(!(* fstreamsptr))\r
95                 return EINVAL;\r
96         \r
97         if((*((fstreams_t*)fstreamsptr))->items)\r
98                 xbt_dynar_free(&((*((fstreams_t*)fstreamsptr))->items));\r
99                 \r
100         free(*fstreamsptr);\r
101         \r
102         *fstreamsptr = NULL;\r
103         return 0;\r
104 }\r
105 \r
106 int\r
107 fstreams_get_size(fstreams_t fstreams)\r
108 {\r
109         if(!fstreams)\r
110         {\r
111                 errno = EINVAL;\r
112                 return -1;\r
113         }\r
114         \r
115         return xbt_dynar_length(fstreams->items);\r
116 }\r
117 \r
118 int\r
119 fstreams_is_empty(fstreams_t fstreams)\r
120 {\r
121         if(!fstreams)\r
122         {\r
123                 errno = EINVAL;\r
124                 return -1;\r
125         }\r
126         \r
127         return (0 == xbt_dynar_length(fstreams->items));\r
128 }\r