summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2014-08-18 11:29:46 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2014-08-18 11:37:41 +0200
commitbcc820ea743e0448b26a8fee5e8e0a9f85bc3c70 (patch)
tree06ba51636861f41832e5a1f4485d8105a6a67a7f /src
parente57b9654ff90230bc8b0631753b3dc0c829a9747 (diff)
downloadcalcurse-bcc820ea743e0448b26a8fee5e8e0a9f85bc3c70.zip
Handle CRLF line endings in iCal files
RFC 2445 mentions that CRLF line endings may be used in iCal files. Handle them properly when importing. Reported-by: HÃ¥kan Jerning <jerning@home.se> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
Diffstat (limited to 'src')
-rw-r--r--src/ical.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/ical.c b/src/ical.c
index 38e1b33..264348b 100644
--- a/src/ical.c
+++ b/src/ical.c
@@ -399,8 +399,12 @@ ical_readline_init(FILE * fdi, char *buf, char *lstore, unsigned *ln)
*buf = *lstore = '\0';
if (fgets(lstore, BUFSIZ, fdi)) {
- if ((eol = strchr(lstore, '\n')) != NULL)
- *eol = '\0';
+ if ((eol = strchr(lstore, '\n')) != NULL) {
+ if (*(eol - 1) == '\r')
+ *(eol - 1) = '\0';
+ else
+ *eol = '\0';
+ }
(*ln)++;
}
}
@@ -413,8 +417,12 @@ static int ical_readline(FILE * fdi, char *buf, char *lstore, unsigned *ln)
(*ln)++;
while (fgets(lstore, BUFSIZ, fdi) != NULL) {
- if ((eol = strchr(lstore, '\n')) != NULL)
- *eol = '\0';
+ if ((eol = strchr(lstore, '\n')) != NULL) {
+ if (*(eol - 1) == '\r')
+ *(eol - 1) = '\0';
+ else
+ *eol = '\0';
+ }
if (*lstore != SPACE && *lstore != TAB)
break;
strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1);