aboutsummaryrefslogtreecommitdiff
path: root/vcal.c
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-01-17 00:20:06 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-01-17 00:20:06 +0100
commit649ade4fb2c588355e89aa060b4d5954f77579e5 (patch)
tree337943cf7e23069bcbfac4a973dee0a59784a0ba /vcal.c
parentFix memory leak. (diff)
downloadcalp-649ade4fb2c588355e89aa060b4d5954f77579e5.tar.gz
calp-649ade4fb2c588355e89aa060b4d5954f77579e5.tar.xz
Further work.
Diffstat (limited to 'vcal.c')
-rw-r--r--vcal.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/vcal.c b/vcal.c
new file mode 100644
index 00000000..a40080fe
--- /dev/null
+++ b/vcal.c
@@ -0,0 +1,45 @@
+#include "vcal.h"
+
+#include <string.h>
+
+int copy_vevent(vevent* dest, vevent* src) {
+ copy_strbuf(&dest->dtstart , &src->dtstart);
+ copy_strbuf(&dest->dtend , &src->dtend);
+ copy_strbuf(&dest->summary , &src->summary);
+ copy_strbuf(&dest->description , &src->description);
+ return 0;
+}
+
+int free_vevent (vevent* ev) {
+ free_string(&ev->dtstart);
+ free_string(&ev->dtend);
+ free_string(&ev->summary);
+ free_string(&ev->description);
+ return 0;
+}
+
+int push_event(vcalendar* cal, vevent* ev) {
+ if (cal->n_events + 1> cal->alloc) {
+ cal->alloc <<= 1;
+ }
+ cal->events = realloc(cal->events, cal->alloc);
+ copy_vevent(&cal->events[cal->n_events], ev);
+ cal->n_events++;
+ return 0;
+}
+
+int init_vcalendar(vcalendar* cal) {
+ cal->events = malloc(sizeof(*cal->events));
+ cal->alloc = 1;
+ cal->n_events = 0;
+ return 0;
+}
+
+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);
+ }
+ return 0;
+}