diff --git a/src/elogd.c b/src/elogd.c index d58fa6c6..5026e6ce 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -14389,7 +14389,9 @@ void csv_import(LOGBOOK * lbs, const char *csv, const char *csvfile) } p = csv; - + datecol = -1; + attr_offset = 0; + do { for (i = 0; i < 10000 && *p; i++) { if (!in_quotes && (*p == '\r' || *p == '\n')) @@ -14448,18 +14450,20 @@ void csv_import(LOGBOOK * lbs, const char *csv, const char *csvfile) } } - /* derive attributes from first line */ - if (first && isparam("head")) { - + if (first) { /* check for date column */ for (i = attr_offset = 0; i < n; i++) if (strieq(list + i * NAME_LENGTH, "Date")) datecol = i; - + /* skip message ID */ for (i = attr_offset = 0; i < n; i++) if (strieq(list + i * NAME_LENGTH, "Message ID") || strieq(list + i * NAME_LENGTH, "Date")) attr_offset++; + } + + /* derive attributes from first line */ + if (first && isparam("head")) { if (isparam("preview")) { rsprintf("\n"); @@ -14491,6 +14495,7 @@ void csv_import(LOGBOOK * lbs, const char *csv, const char *csvfile) return; lbs->n_attr = n - attr_offset; } + n_attr = lbs->n_attr; } } else { @@ -14501,9 +14506,6 @@ void csv_import(LOGBOOK * lbs, const char *csv, const char *csvfile) continue; } - datecol = 1; - attr_offset = 2; - if (isparam("preview")) { rsprintf("\n"); for (i = j = attr_offset; i < n_attr + attr_offset; i++) { @@ -14540,24 +14542,27 @@ void csv_import(LOGBOOK * lbs, const char *csv, const char *csvfile) } else { /* get date and check it */ - strlcpy(date, list + datecol * NAME_LENGTH, sizeof(date)); - ltime = date_to_ltime(date); - if (ltime <= 0) { - /* try other date formats */ - ltime = convert_datetime(date); - if (ltime <= 0) - ltime = convert_date(date); + if (datecol != -1) { + strlcpy(date, list + datecol * NAME_LENGTH, sizeof(date)); + ltime = date_to_ltime(date); if (ltime <= 0) { - strcpy(str, loc("Invalid date format")); - strlcat(str, ": \"", sizeof(str)); - strlcat(str, date, sizeof(str)); - strlcat(str, "\"", sizeof(str)); - show_error(str); - return; + /* try other date formats */ + ltime = convert_datetime(date); + if (ltime <= 0) + ltime = convert_date(date); + if (ltime <= 0) { + strcpy(str, loc("Invalid date format")); + strlcat(str, ": \"", sizeof(str)); + strlcat(str, date, sizeof(str)); + strlcat(str, "\"", sizeof(str)); + show_error(str); + return; + } + /* convert back ltime to date */ + get_rfc2822_date(date, sizeof(date), ltime); } - /* convert back ltime to date */ - get_rfc2822_date(date, sizeof(date), ltime); - } + } else + date[0] = 0; if (!filltext) { /* submit entry */