#include "list_handling.h" #include "parse_ics.h" #include "string_handling.h" #include #include #include #include void parse_event(char event_string[], struct event **head) { char *start_date = strstr(event_string, "\r\nDTSTART"); char *end_date = strstr(event_string, "\r\nDTEND"); char *summary = strstr(event_string, "\r\nSUMMARY"); 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, '\r') - start_date); strncpy(end_date_str, end_date, strchr(end_date, '\r') - end_date); strncpy(summary_str, summary, strchr(summary, '\r') - 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 semicolon // 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') { while (isblank(folded_string[i+2])) { i++; if (! isblank(folded_string[i+2])) folded_string[i+1] = ';'; } } else { unfolded_string[j] = folded_string[i]; j++; } } }