X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1e0b1d40a6285c532b722f4584fa7ddde220deff..95e0df2af:/uip/mhical.c?ds=inline diff --git a/uip/mhical.c b/uip/mhical.c index eb26c388..573d7cf4 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; @@ -140,12 +140,12 @@ main (int argc, char *argv[]) { case INFILESW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) adios (NULL, "missing argument to %s", argp[-2]); - infile = *cp == '-' ? add (cp, NULL) : path (cp, TFILE); + infile = *cp == '-' ? mh_xstrdup(cp) : path (cp, TFILE); continue; case OUTFILESW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) adios (NULL, "missing argument to %s", argp[-2]); - outfile = *cp == '-' ? add (cp, NULL) : path (cp, TFILE); + outfile = *cp == '-' ? mh_xstrdup(cp) : path (cp, TFILE); continue; case CONTENTTYPESW: @@ -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; + + node_copy = *node; + 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); + } } }