Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add the new integrated files version (use xbt data structures instead my own data...
[simgrid.git] / tools / tesh2 / src / directories.c
1 #include <directories.h>\r
2 #include <directory.h>\r
3 \r
4 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
5 \r
6 directories_t\r
7 directories_new(void)\r
8 {\r
9         directories_t directories = xbt_new0(s_directories_t, 1);\r
10         \r
11         directories->items = xbt_dynar_new(sizeof(directory_t), (void_f_pvoid_t)directory_free);\r
12         \r
13         return directories;\r
14 }\r
15 \r
16 int\r
17 directories_get_size(directories_t directories)\r
18 {\r
19         if(!directories)\r
20         {\r
21                 errno = EINVAL;\r
22                 return -1;\r
23         }\r
24 \r
25         return xbt_dynar_length(directories->items);\r
26 }\r
27 \r
28 int\r
29 directories_is_empty(directories_t directories)\r
30 {\r
31         if(!directories)\r
32         {\r
33                 errno = EINVAL;\r
34                 return -1;\r
35         }\r
36 \r
37         return (0 == xbt_dynar_length(directories->items));\r
38 }\r
39 \r
40 int\r
41 directories_add(directories_t directories, directory_t directory)\r
42 {\r
43         directory_t cur;\r
44         unsigned int i;\r
45         \r
46         if(!directories)\r
47                 return EINVAL;\r
48         \r
49         xbt_dynar_foreach(directories->items, i, cur)\r
50         {\r
51                 if(!strcmp(cur->name, directory->name))\r
52                         return EEXIST;\r
53         }\r
54 \r
55         xbt_dynar_push(directories->items, &directory);\r
56 \r
57         return 0;\r
58 }\r
59 \r
60 int\r
61 directories_contains(directories_t directories, directory_t directory)\r
62 {\r
63         directory_t* cur;\r
64         unsigned int i;\r
65         \r
66         if(!directories)\r
67                 return EINVAL;\r
68 \r
69         xbt_dynar_foreach(directories->items, i, cur)\r
70         {\r
71                 if(!strcmp((*cur)->name, directory->name))\r
72                         return 1;\r
73         }\r
74 \r
75         return 0;\r
76 }\r
77 \r
78 int\r
79 directories_load(directories_t directories, fstreams_t fstreams, xbt_dynar_t suffixes)\r
80 {\r
81         directory_t directory;\r
82         int rv;\r
83         unsigned int i;\r
84         \r
85         if(!directories || !fstreams || !suffixes)\r
86                 return EINVAL;\r
87         \r
88         xbt_dynar_foreach(directories->items, i, directory)\r
89         {\r
90                 if((rv = directory_open(directory)))\r
91                         return rv;\r
92                 \r
93                 if((rv = directory_load(directory, fstreams, suffixes)))\r
94                         return rv;\r
95                         \r
96                 if((rv = directory_close(directory)))\r
97                         return rv;\r
98         }\r
99 \r
100         return 0;\r
101 }\r
102 \r
103 int\r
104 directories_free(void** directoriesptr)\r
105 {\r
106         directories_t directories;\r
107         \r
108         if(!(*directoriesptr))\r
109                 return EINVAL;\r
110 \r
111         directories = (directories_t)(*directoriesptr);\r
112 \r
113         xbt_dynar_free(&(directories->items));\r
114         \r
115         free(*directoriesptr);\r
116         *directoriesptr = NULL;\r
117         \r
118         return 0;       \r
119 }\r