summaryrefslogtreecommitdiffabout
path: root/libical/src/libicalss/icalcalendar.c
Unidiff
Diffstat (limited to 'libical/src/libicalss/icalcalendar.c') (more/less context) (ignore whitespace changes)
-rw-r--r--libical/src/libicalss/icalcalendar.c263
1 files changed, 263 insertions, 0 deletions
diff --git a/libical/src/libicalss/icalcalendar.c b/libical/src/libicalss/icalcalendar.c
new file mode 100644
index 0000000..1f24f88
--- a/dev/null
+++ b/libical/src/libicalss/icalcalendar.c
@@ -0,0 +1,263 @@
1/*======================================================================
2 FILE: icalcalendar.c
3 CREATOR: eric 23 December 1999
4
5 $Id$
6 $Locker$
7
8 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of either:
12
13 The LGPL as published by the Free Software Foundation, version
14 2.1, available at: http://www.fsf.org/copyleft/lesser.html
15
16 Or:
17
18 The Mozilla Public License Version 1.0. You may obtain a copy of
19 the License at http://www.mozilla.org/MPL/
20
21 ======================================================================*/
22
23
24#ifdef HAVE_CONFIG_H
25#include "config.h"
26#endif
27
28
29#include "icalcalendar.h"
30#include "icalset.h"
31#include "icalfileset.h"
32#include "icaldirset.h"
33#include <limits.h>
34#include <sys/stat.h> /* For mkdir, stat */
35#include <sys/types.h> /* For mkdir */
36#include <fcntl.h> /* For mkdir */
37
38#ifndef WIN32
39#include <unistd.h> /* For mkdir, stat */
40#endif
41
42#ifndef PATH_MAX
43#define PATH_MAX 512
44#endif
45
46
47#include <stdlib.h> /* for malloc */
48#include <string.h> /* for strcat */
49#include <errno.h>
50
51#define BOOKED_DIR "booked"
52#define INCOMING_FILE "incoming.ics"
53#define PROP_FILE "properties.ics"
54#define FBLIST_FILE "freebusy.ics"
55
56struct icalcalendar_impl
57{
58 char* dir;
59 icalset* freebusy;
60 icalset* properties;
61 icalset* booked;
62 icalset* incoming;
63};
64
65struct icalcalendar_impl* icalcalendar_new_impl(void)
66{
67 struct icalcalendar_impl* impl;
68
69 if ( ( impl = (struct icalcalendar_impl*)
70 malloc(sizeof(struct icalcalendar_impl))) == 0) {
71 icalerror_set_errno(ICAL_NEWFAILED_ERROR);
72 return 0;
73 }
74
75 return impl;
76}
77
78
79icalerrorenum icalcalendar_create(struct icalcalendar_impl* impl)
80{
81 char path[PATH_MAX];
82 struct stat sbuf;
83 int r;
84
85 icalerror_check_arg_re((impl != 0),"impl",ICAL_BADARG_ERROR);
86
87 path[0] = '\0';
88 strcpy(path,impl->dir);
89 strcat(path,"/");
90 strcat(path,BOOKED_DIR);
91
92 r = stat(path,&sbuf);
93
94 if( r != 0 && errno == ENOENT){
95
96 if(mkdir(path,0777)!=0){
97 icalerror_set_errno(ICAL_FILE_ERROR);
98 return ICAL_FILE_ERROR;
99 }
100 }
101
102 return ICAL_NO_ERROR;
103}
104
105icalcalendar* icalcalendar_new(char* dir)
106{
107 struct icalcalendar_impl* impl;
108
109 icalerror_check_arg_rz((dir != 0),"dir");
110
111 impl = icalcalendar_new_impl();
112
113 if (impl == 0){
114 return 0;
115 }
116
117 impl->dir = (char*)strdup(dir);
118 impl->freebusy = 0;
119 impl->properties = 0;
120 impl->booked = 0;
121 impl->incoming = 0;
122
123 if (icalcalendar_create(impl) != ICAL_NO_ERROR){
124 free(impl);
125 return 0;
126 }
127
128 return impl;
129}
130
131void icalcalendar_free(icalcalendar* impl)
132{
133 if (impl->dir !=0){
134 free(impl->dir);
135 }
136
137 if (impl->freebusy !=0){
138 icalset_free(impl->booked);
139 }
140
141 if (impl->properties !=0){
142 icalset_free(impl->properties);
143 }
144
145 if (impl->booked !=0){
146 icalset_free(impl->booked);
147 }
148
149 if (impl->incoming !=0){
150 icalset_free(impl->incoming);
151 }
152
153 impl->dir = 0;
154 impl->freebusy = 0;
155 impl->properties = 0;
156 impl->booked = 0;
157 impl->incoming = 0;
158
159
160 free(impl);
161}
162
163
164int icalcalendar_lock(icalcalendar* impl)
165{
166 icalerror_check_arg_rz((impl != 0),"impl");
167 return 0;
168}
169
170int icalcalendar_unlock(icalcalendar* impl)
171{
172 icalerror_check_arg_rz((impl != 0),"impl");
173 return 0;
174}
175
176int icalcalendar_islocked(icalcalendar* impl)
177{
178 icalerror_check_arg_rz((impl != 0),"impl");
179 return 0;
180}
181
182int icalcalendar_ownlock(icalcalendar* impl)
183{
184 icalerror_check_arg_rz((impl != 0),"impl");
185 return 0;
186}
187
188icalset* icalcalendar_get_booked(icalcalendar* impl)
189{
190 char dir[PATH_MAX];
191
192 icalerror_check_arg_rz((impl != 0),"impl");
193
194 dir[0] = '\0';
195 strcpy(dir,impl->dir);
196 strcat(dir,"/");
197 strcat(dir,BOOKED_DIR);
198
199 if (impl->booked == 0){
200 icalerror_clear_errno();
201 impl->booked = icaldirset_new(dir);
202 assert(icalerrno == ICAL_NO_ERROR);
203 }
204
205 return impl->booked;
206
207}
208
209icalset* icalcalendar_get_incoming(icalcalendar* impl)
210{
211 char path[PATH_MAX];
212 icalerror_check_arg_rz((impl != 0),"impl");
213
214 path[0] = '\0';
215 strcpy(path,impl->dir);
216 strcat(path,"/");
217 strcat(path,INCOMING_FILE);
218
219 if (impl->properties == 0){
220 impl->properties = icalfileset_new(path);
221 }
222
223 return impl->properties;
224}
225
226icalset* icalcalendar_get_properties(icalcalendar* impl)
227{
228 char path[PATH_MAX];
229 icalerror_check_arg_rz((impl != 0),"impl");
230
231 path[0] = '\0';
232 strcpy(path,impl->dir);
233 strcat(path,"/");
234 strcat(path,PROP_FILE);
235
236 if (impl->properties == 0){
237 impl->properties = icalfileset_new(path);
238 }
239
240 return impl->properties;
241}
242
243icalset* icalcalendar_get_freebusy(icalcalendar* impl)
244{
245 char path[PATH_MAX];
246 icalerror_check_arg_rz((impl != 0),"impl");
247
248 path[0] = '\0';
249 strcpy(path,impl->dir);
250 strcat(path,"/");
251 strcat(path,FBLIST_FILE);
252
253
254 if (impl->freebusy == 0){
255 impl->freebusy = icalfileset_new(path);
256 }
257
258 return impl->freebusy;
259}
260
261
262
263