aboutsummaryrefslogtreecommitdiff
path: root/parse.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 /parse.c
parentFurther work. (diff)
downloadcalp-068c19291e78ac62b2cdd02a0c7753eb8254e2c2.tar.gz
calp-068c19291e78ac62b2cdd02a0c7753eb8254e2c2.tar.xz
Works reasonably well for single calendar files.
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/parse.c b/parse.c
index 317a9acf..0f655cfb 100644
--- a/parse.c
+++ b/parse.c
@@ -27,6 +27,8 @@
fprintf(stderr, "ERR %i: %s (cal %i)\n", __LINE__, (x), (line)); \
} while(0)
+#define LINE(nr, key, value) fprintf(stderr, "%i: [%s] := [%s]\n", nr, key, value);
+
typedef enum {
p_key, p_value
} part_context;
@@ -79,7 +81,7 @@ int parse_file(char* fname, vcalendar* cal) {
// TODO segments is always incremented here, meaning
// that segment grows larger for every multi line
// encountered.
-#if 0
+#if 1
if (realloc_string(&str, ++segments * SEGSIZE) != 0) { /* TODO signal error */
ERR("Failed to realloc string", line);
exit (1);
@@ -97,12 +99,12 @@ int parse_file(char* fname, vcalendar* cal) {
realloc_string(&val, vallen);
}
copy_strbuf(&val, &str);
- *strbuf_cur(&val) = 0;
+ strbuf_cap(&val);
++line;
/* We just got a value */
- /* TODO for some reason both key and val is empty here */
+ LINE(line, key.mem, val.mem);
handle_kv(cal, &ev, &key, &val, line, &s_ctx);
strbuf_soft_reset(&str);
p_ctx = p_key;
@@ -127,7 +129,7 @@ int parse_file(char* fname, vcalendar* cal) {
strbuf_append(&str, c);
}
if (errno != 0) {
- ERR("Error parsing", -1);
+ ERR("Error parsing", errno);
} else {
/*
* Close last pair if the file is lacking trailing whitespace.
@@ -141,15 +143,12 @@ int parse_file(char* fname, vcalendar* cal) {
copy_strbuf(&val, &str);
*strbuf_cur(&val) = 0;
}
- // TODO this segfaults
- /*
free_vevent(&ev);
free_string(&str);
free_string(&key);
free_string(&val);
- */
- // fclose(f);
+ fclose(f);
return 0;
}
@@ -159,13 +158,14 @@ int main (int argc, char* argv[argc]) {
puts("Please give a ics file as first argument");
exit (1);
}
+ printf("\nParsing %s\n", argv[1]);
vcalendar cal;
init_vcalendar(&cal);
parse_file(argv[1], &cal);
- printf("Parsed calendar file containing [%lu] events\n\n", cal.n_events);
+ printf("\nParsed calendar file containing [%lu] events\n", cal.n_events);
for (size_t i = 0; i < cal.n_events; i++) {
- printf("%lu: %s\n", i, cal.events[i].summary.mem);
+ printf("%2lu. %s\n", i + 1, cal.events[i].summary.mem);
}
free_vcalendar(&cal);