agendafs
A filesystem for your calendar.
git clone git://mccd.space/agendafscommit ca205e64d4091ba65db76fdc7200ed25ba9f8399
parent 0f4a7a834df3ac67f623a4e341b4677f11a6d971
Author: Marc Coquand <marc@coquand.email>
Date: Wed, 16 Jul 2025 11:22:12 +0200
Greatly simplify parsing logic
Diffstat:
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/journal_entry.c b/journal_entry.c
@@ -352,25 +352,22 @@ parse_entry_content(struct journal_entry *entry, const char *buf, size_t size)
icalcomponent *
parse_ics_file(const char *filename)
{
- icalcomponent *component = NULL;
- icalparser *parser = icalparser_new();
- FILE *stream = fopen(filename, "r");
- assert(stream != 0);
+ FILE *file = fopen(filename, "r");
+ assert(file != NULL);
- icalparser_set_gen_data(parser, stream);
+ struct stat st;
+ stat(filename, &st);
+ size_t size = st.st_size;
- char *line;
- do {
- line = icalparser_get_line(parser, read_stream);
- icalcomponent *temp = icalparser_add_line(parser, line);
- if (temp != NULL && component == NULL) {
- component = temp; // Save the first completed component
- }
- } while (line != NULL);
+ char *buffer = xmalloc(size + 1);
+ size_t bytes_read = fread(buffer, 1, size, file);
+ buffer[bytes_read] = '\0';
+ fclose(file);
+
+ icalcomponent *component = icalcomponent_new_from_string(buffer);
+ free(buffer);
- fclose(stream);
- icalparser_free(parser);
return component;
}
@@ -647,9 +644,10 @@ copy_journal_entry(const struct journal_entry *src)
{
struct journal_entry *copy = xcalloc(1, sizeof(struct journal_entry));
- copy->filename = strdup(src->filename);
- copy->filename_original = strdup(src->filename_original);
+ copy->filename = xstrdup(src->filename);
+ copy->filename_original = xstrdup(src->filename_original);
copy->component = icalcomponent_new_clone(src->component);
+ assert(copy->component);
copy->gid = src->gid;
copy->uid = src->uid;