X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/3f609815e33ab5474e631eac097d515d982ff0f5..ef1ba39e8dae81091b6c3e73e72825ef6edea3c6:/uip/mhical.c diff --git a/uip/mhical.c b/uip/mhical.c index eb26c388..70f96dd2 100644 --- a/uip/mhical.c +++ b/uip/mhical.c @@ -76,7 +76,7 @@ main (int argc, char *argv[]) { icaldebug = 0; /* Global provided by bison (with name-prefix "ical"). */ - if (nmh_init(argv[0], 1)) { return 1; } + if (nmh_init(argv[0], 2)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -642,7 +642,7 @@ display (FILE *file, contentline *clines, char *nfs) { } else if (! strcasecmp ("DTSTART", node->name)) { /* Got it: DTSTART outside of a VTIMEZONE section. */ char *datetime = format_datetime (timezones, node); - c->c_text = datetime ? datetime : node->value; + c->c_text = datetime ? datetime : strdup(node->value); } } } @@ -651,7 +651,26 @@ display (FILE *file, contentline *clines, char *nfs) { if ((c = fmt_findcomp ("dtend"))) { if ((node = find_contentline (clines, "DTEND", 0)) && node->value) { char *datetime = format_datetime (timezones, node); - c->c_text = datetime ? datetime : node->value; + c->c_text = datetime ? datetime : strdup(node->value); + } else if ((node = find_contentline (clines, "DTSTART", 0)) && + node->value) { + /* There is no DTEND. If there's a DTSTART, use it. If it + doesn't have a time, assume that the event is for the + entire day and append 23:59:59 to it so that it signifies + the end of the day. And assume local timezone. */ + if (strchr(node->value, 'T')) { + char * datetime = format_datetime (timezones, node); + c->c_text = datetime ? datetime : strdup(node->value); + } else { + char *datetime; + contentline node_copy; + + memcpy(&node_copy, node, sizeof node_copy); + node_copy.value = concat(node_copy.value, "T235959", NULL); + datetime = format_datetime (timezones, &node_copy); + c->c_text = datetime ? datetime : strdup(node_copy.value); + free(node_copy.value); + } } }