aboutsummaryrefslogtreecommitdiff
path: root/vcal.c
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-01-17 18:49:57 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-01-17 18:49:57 +0100
commit068c19291e78ac62b2cdd02a0c7753eb8254e2c2 (patch)
treed83bfd61ac862ad7b32695861a6cdbed05712dc5 /vcal.c
parentFurther work. (diff)
downloadcalp-068c19291e78ac62b2cdd02a0c7753eb8254e2c2.tar.gz
calp-068c19291e78ac62b2cdd02a0c7753eb8254e2c2.tar.xz
Works reasonably well for single calendar files.
Diffstat (limited to 'vcal.c')
-rw-r--r--vcal.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/vcal.c b/vcal.c
index a40080fe..a67e0246 100644
--- a/vcal.c
+++ b/vcal.c
@@ -10,6 +10,14 @@ int copy_vevent(vevent* dest, vevent* src) {
return 0;
}
+int vevent_init_copy(vevent* dest, vevent* src) {
+ strbuf_init_copy(&dest->dtstart , &src->dtstart);
+ strbuf_init_copy(&dest->dtend , &src->dtend);
+ strbuf_init_copy(&dest->summary , &src->summary);
+ strbuf_init_copy(&dest->description , &src->description);
+ return 0;
+}
+
int free_vevent (vevent* ev) {
free_string(&ev->dtstart);
free_string(&ev->dtend);
@@ -19,11 +27,15 @@ int free_vevent (vevent* ev) {
}
int push_event(vcalendar* cal, vevent* ev) {
- if (cal->n_events + 1> cal->alloc) {
+
+ /* Make sure that cal->events is large enough */
+ if (cal->n_events + 1 > cal->alloc) {
cal->alloc <<= 1;
+ cal->events = realloc(cal->events, sizeof(*cal->events) * cal->alloc);
}
- cal->events = realloc(cal->events, cal->alloc);
- copy_vevent(&cal->events[cal->n_events], ev);
+
+ vevent_init_copy(&cal->events[cal->n_events], ev);
+
cal->n_events++;
return 0;
}
@@ -37,9 +49,8 @@ int init_vcalendar(vcalendar* cal) {
int free_vcalendar (vcalendar* cal) {
for (size_t i = 0; i < cal->n_events; i++) {
- vevent* v = & cal->events[i];
- free_vevent(v);
- free(v);
+ free_vevent(& cal->events[i]);
}
+ free (cal->events);
return 0;
}