31#include "icaldirsetimpl.h"
32#include "icalerror_p.h"
34#include "icalfilesetimpl.h"
38#include "icalbdbsetimpl.h"
45#if defined(_DLOPEN_TEST)
51static icalset icalset_dirset_init = {
76static icalset icalset_fileset_init = {
102static icalset icalset_bdbset_init = {
128#if defined(_DLOPEN_TEST)
129static int icalset_init_done = 0;
130static icalpvl_list icalset_kinds = 0;
132typedef icalset *(*fptr)(void);
137static bool load(
const char *file)
142 icalset *icalset_init_ptr;
144 if ((modh = dlopen(file, RTLD_NOW)) == 0) {
150 inith = (fptr)dlsym(modh,
"InitModule");
153 fprintf(stderr,
"dlsym error: %s\n", dlerr);
158 while ((icalset_init_ptr = ((inith)())) != 0) {
159 icalpvl_push(icalset_kinds, &icalset_init_ptr);
167static void icalset_init(
void)
169 assert(icalset_kinds == 0);
170 icalset_kinds = icalpvl_newlist();
172 icalpvl_push(icalset_kinds, &icalset_fileset_init);
173 icalpvl_push(icalset_kinds, &icalset_dirset_init);
175 icalpvl_push(icalset_kinds, &icalset_bdb4set_init);
183 if (!icalset_init_done) {
187 icalpvl_push(icalset_kinds, set);
195 icalset *data = NULL;
198#if defined(_DLOPEN_TEST)
202 if (!icalset_init_done) {
206 for (e = icalpvl_head(icalset_kinds); e != 0; e = icalpvl_next(e)) {
207 impl = (icalset *)icalpvl_data(e);
208 if (impl->kind ==
kind) {
217 data = (icalset *)malloc(impl->size);
218 if (data == (icalset *)NULL) {
225 memset(data, 0, impl->size);
227 memcpy(data, impl,
sizeof(icalset));
229 data->dsn = strdup(dsn);
235 data = (icalset *)fdata;
242 *data = icalset_fileset_init;
248 data = (icalset *)ddata;
255 *data = icalset_dirset_init;
262 data = (icalset *)bdata;
269 *data = icalset_bdbset_init;
281 data->dsn = strdup(dsn);
285 if ((ret = data->init(data, dsn, options)) == NULL) {
340 return set->path(set);
350 return set->commit(set);
355 return set->add_component(set, comp);
360 return set->remove_component(set, comp);
365 return set->count_components(set,
kind);
370 return set->select(set, gauge);
380 return set->fetch(set, 0, uid);
385 return set->fetch_match(set, comp);
390 return set->has_uid(set, uid);
395 return set->modify(set, old,
new);
400 return set->get_current_component(set);
405 return set->get_first_component(set);
410 return set->get_next_component(set);
418 return set->icalset_begin_component(set,
kind, gauge, tzid);
423 icalcomponent *c = 0;
425 icalerror_check_arg_rz((itr != NULL),
"i");
439 icalcomponent *c = 0;
441 icalerror_check_arg_rz((i != NULL),
"i");
455 icalerror_check_arg_rz((i != NULL),
"i");
462 return set->icalsetiter_to_next(set, i);
467 return set->icalsetiter_to_prior(set, i);
icalcomponent * icalbdbset_get_first_component(icalset *set)
icalerrorenum icalbdbset_add_component(icalset *set, icalcomponent *child)
icalcomponent * icalbdbset_get_next_component(icalset *set)
icalerrorenum icalbdbset_select(icalset *set, icalgauge *gauge)
int icalbdbset_has_uid(icalset *set, const char *uid)
icalcomponent * icalbdbset_fetch_match(icalset *set, const icalcomponent *comp)
void icalbdbset_clear(icalset *set)
icalcomponent * icalbdbsetiter_to_next(icalset *set, icalsetiter *i)
const char * icalbdbset_path(icalset *set)
icalcomponent * icalbdbset_get_current_component(icalset *set)
icalcomponent * icalbdbset_fetch(icalset *set, icalcomponent_kind kind, const char *uid)
icalsetiter icalbdbset_begin_component(icalset *set, icalcomponent_kind kind, icalgauge *gauge, const char *tzid)
void icalbdbset_free(icalset *set)
int icalbdbset_count_components(icalset *set, icalcomponent_kind kind)
icalerrorenum icalbdbset_remove_component(icalset *set, icalcomponent *child)
icalerrorenum icalbdbset_modify(icalset *set, icalcomponent *old, icalcomponent *newc)
icalerrorenum icalbdbset_commit(icalset *set)
icalset * icalbdbset_init(icalset *set, const char *dsn, void *options_in)
void icalbdbset_mark(icalset *set)
Manages a Berkeley database of ical components and offers interfaces for reading, writing and searchi...
struct icalbdbset_impl icalbdbset
icalcomponent * icalcompiter_next(icalcompiter *i)
icalcomponent * icalcompiter_deref(icalcompiter *i)
icalcomponent * icalcompiter_prior(icalcompiter *i)
icalerrorenum icaldirset_add_component(icalset *set, icalcomponent *comp)
icalsetiter icaldirset_begin_component(icalset *set, icalcomponent_kind kind, icalgauge *gauge, const char *tzid)
icalcomponent * icaldirset_fetch(icalset *set, icalcomponent_kind kind, const char *uid)
icalset * icaldirset_init(icalset *set, const char *dir, void *options_in)
icalcomponent * icaldirset_get_current_component(icalset *set)
int icaldirset_has_uid(icalset *set, const char *uid)
icalset * icaldirset_new_reader(const char *dir)
icalerrorenum icaldirset_commit(icalset *set)
void icaldirset_clear(icalset *set)
icalerrorenum icaldirset_modify(icalset *set, icalcomponent *oldcomp, icalcomponent *newcomp)
icalcomponent * icaldirset_fetch_match(icalset *set, const icalcomponent *c)
icalcomponent * icaldirset_get_next_component(icalset *set)
const char * icaldirset_path(icalset *set)
void icaldirset_mark(icalset *set)
icalerrorenum icaldirset_remove_component(icalset *set, icalcomponent *comp)
icalset * icaldirset_new_writer(const char *dir)
icalerrorenum icaldirset_select(icalset *set, icalgauge *gauge)
icalcomponent * icaldirset_get_first_component(icalset *set)
icalcomponent * icaldirsetiter_to_next(icalset *set, icalsetiter *i)
icalcomponent * icaldirsetiter_to_prior(icalset *set, icalsetiter *i)
void icaldirset_free(icalset *s)
int icaldirset_count_components(icalset *store, icalcomponent_kind kind)
Manages a database of ical components and offers interfaces for reading, writing and searching for co...
struct icaldirset_impl icaldirset
enum icalrequeststatus kind
void icalerror_set_errno(icalerrorenum x)
Sets the icalerrno to a given error.
icalerrorenum
Represents the different types of errors that can be triggered in libical.
@ ICAL_UNIMPLEMENTED_ERROR
int icalfileset_has_uid(icalset *set, const char *uid)
icalcomponent * icalfileset_get_current_component(icalset *set)
void icalfileset_mark(icalset *set)
const char * icalfileset_path(icalset *set)
icalerrorenum icalfileset_select(icalset *set, icalgauge *gauge)
icalerrorenum icalfileset_modify(icalset *set, icalcomponent *old, icalcomponent *new)
Modifies components according to the MODIFY method of CAP.
void icalfileset_clear(icalset *set)
Clears the gauge.
icalset * icalfileset_new_reader(const char *path)
icalcomponent * icalfileset_get_next_component(icalset *set)
icalerrorenum icalfileset_remove_component(icalset *set, icalcomponent *child)
int icalfileset_count_components(icalset *set, icalcomponent_kind kind)
icalcomponent * icalfilesetiter_to_next(icalset *set, icalsetiter *i)
icalerrorenum icalfileset_add_component(icalset *set, icalcomponent *child)
icalcomponent * icalfileset_fetch(icalset *set, icalcomponent_kind kind, const char *uid)
Gets and searches for a component by uid.
icalset * icalfileset_init(icalset *set, const char *path, void *options_in)
icalcomponent * icalfileset_fetch_match(icalset *set, const icalcomponent *comp)
icalerrorenum icalfileset_commit(icalset *set)
void icalfileset_free(icalset *set)
icalsetiter icalfileset_begin_component(icalset *set, icalcomponent_kind kind, icalgauge *gauge, const char *tzid)
icalcomponent * icalfileset_get_first_component(icalset *set)
icalset * icalfileset_new_writer(const char *path)
Manages a database of ical components and offers interfaces for reading, writing and searching for co...
struct icalfileset_impl icalfileset
bool icalgauge_compare(icalgauge *gauge, icalcomponent *comp)
icalerrorenum icalset_select(icalset *set, icalgauge *gauge)
icalsetiter icalset_begin_component(icalset *set, icalcomponent_kind kind, icalgauge *gauge, const char *tzid)
void icalset_free(icalset *set)
icalerrorenum icalset_commit(icalset *set)
void icalset_mark(icalset *set)
icalerrorenum icalset_remove_component(icalset *set, icalcomponent *comp)
int icalset_count_components(icalset *set, icalcomponent_kind kind)
icalcomponent * icalset_get_current_component(icalset *set)
icalcomponent * icalsetiter_to_next(icalset *set, icalsetiter *i)
icalerrorenum icalset_modify(icalset *set, icalcomponent *old, icalcomponent *new)
icalset * icalset_new_dir_reader(const char *path)
icalset * icalset_new_file(const char *path)
icalcomponent * icalset_get_first_component(icalset *set)
icalsetiter icalsetiter_null
icalcomponent * icalsetiter_next(icalsetiter *itr)
const char * icalset_path(icalset *set)
int icalset_has_uid(icalset *set, const char *uid)
icalcomponent * icalsetiter_deref(icalsetiter *i)
icalset * icalset_new_file_writer(const char *path)
icalcomponent * icalset_fetch(icalset *set, const char *uid)
icalcomponent * icalsetiter_to_prior(icalset *set, icalsetiter *i)
icalcomponent * icalsetiter_prior(icalsetiter *i)
icalcomponent * icalset_get_next_component(icalset *set)
icalset * icalset_new_dir_writer(const char *path)
icalcomponent * icalset_fetch_match(icalset *set, const icalcomponent *comp)
icalset * icalset_new(icalset_kind kind, const char *dsn, void *options)
icalerrorenum icalset_add_component(icalset *set, icalcomponent *comp)
void icalset_clear(icalset *set)
icalset * icalset_new_dir(const char *path)
icalset * icalset_new_file_reader(const char *path)
Icalset is the "base class" for representations of a collection of iCal components.
bool icalset_register_class(icalset *set)