agendafs

A filesystem for your calendar.

git clone git://mccd.space/agendafs
commit ca205e64d4091ba65db76fdc7200ed25ba9f8399
parent 0f4a7a834df3ac67f623a4e341b4677f11a6d971
Author: Marc Coquand <marc@coquand.email>
Date:   Wed, 16 Jul 2025 11:22:12 +0200

Greatly simplify parsing logic

Diffstat:
Mjournal_entry.c | 32+++++++++++++++-----------------
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;