#include "list_handling.h" #include "parse_ics.h" #include "string_handling.h" #include #include #include #include #include void parse_event(char event_string[], struct event **head) { char *start_date = strstr(event_string, "\nDTSTART"); char *end_date = strstr(event_string, "\nDTEND"); char *summary = strstr(event_string, "\nSUMMARY"); summary = strchr(summary, ':') + 1; char *start_date_str = malloc(256); char *end_date_str = malloc(256); char *summary_str = malloc(512); memset(start_date_str, '\0', 256); memset(end_date_str, '\0', 256); memset(summary_str, '\0', 512); assert(start_date != NULL); assert(end_date != NULL); assert(summary != NULL); strncpy(start_date_str, start_date, strchr(start_date + 1, '\n') - start_date); strncpy(end_date_str, end_date, strchr(end_date + 1, '\n') - end_date); strncpy(summary_str, summary, strchr(summary + 1, '\n') - summary); // parse dates remove_whitespace(start_date_str); cut_string(start_date_str, ':', 1); remove_whitespace(end_date_str); cut_string(end_date_str, ':', 1); sorted_insert(head, start_date_str, end_date_str, summary_str); free(start_date_str); free(end_date_str); free(summary_str); } // the unfolded string has a space // as a separator between what where previously separate lines void unfolding_string(char *folded_string, char *unfolded_string) { int j = 0; for (int i = 0; i < strlen(folded_string); i++) { if (folded_string[i] == '\r' && folded_string[i + 1] == '\n' && isblank(folded_string[i + 2])) { i += 3; while (isblank(folded_string[i])) { i++; } unfolded_string[j] = ' '; j++; unfolded_string[j] = folded_string[i]; j++; } else { unfolded_string[j] = folded_string[i]; j++; } } }