int restore_date (mu_message_t msg, mbox_data_t mud) { mu_header_t hdr; char *date = NULL; time_t t; int rc = 0; if (mu_message_get_header (msg, &hdr) == 0) mu_header_aget_value (hdr, MU_HEADER_DATE, &date); if (date && mu_parse_date (date, &t, NULL)) { char datebuf[MU_ENVELOPE_DATE_LENGTH+1]; /* FIXME: 1. Preserve TZ info */ mu_strftime (datebuf, sizeof datebuf, MU_ENVELOPE_DATE_FORMAT, localtime (&t)); free (date); date = strdup (datebuf); } else { time (&t); free (date); date = strdup (ctime (&t)); } mud->date = date; if (!mud->date) rc = ENOMEM; return rc; }
/* Message envelope */ static int message_envelope_date (mu_envelope_t envelope, char *buf, size_t len, size_t *pnwrite) { mu_message_t msg = mu_envelope_get_owner (envelope); time_t t; size_t n; if (msg == NULL) return EINVAL; /* FIXME: extract the time from "Date:". */ if (buf == NULL || len == 0) { n = MU_DATETIME_FROM_LENGTH; } else { char tmpbuf[MU_DATETIME_FROM_LENGTH+1]; t = time (NULL); n = mu_strftime (tmpbuf, sizeof tmpbuf, MU_DATETIME_FROM, gmtime (&t)); n = mu_cpystr (buf, tmpbuf, len); } if (pnwrite) *pnwrite = n; return 0; }