FALSE);
}
-#if 0
-gchar *procheader_get_unfolded_line(gchar *buf, size_t len, FILE *fp)
-{
- gboolean folded = FALSE;
- gint nexthead;
- gchar *bufp;
-
- if (fgets(buf, len, fp) == NULL) return NULL;
- if (buf[0] == '\r' || buf[0] == '\n') return NULL;
- bufp = buf + strlen(buf);
-
- for (; bufp > buf &&
- (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
- bufp--)
- *(bufp - 1) = '\0';
-
- while (1) {
- nexthead = fgetc(fp);
-
- /* folded */
- if (nexthead == ' ' || nexthead == '\t')
- folded = TRUE;
- else if (nexthead == EOF)
- break;
- else if (folded == TRUE) {
- if ((len - (bufp - buf)) <= 2) break;
-
- if (nexthead == '\n') {
- folded = FALSE;
- continue;
- }
-
- /* replace return code on the tail end
- with space */
- *bufp++ = ' ';
- *bufp++ = nexthead;
- *bufp = '\0';
-
- /* concatenate next line */
- if (fgets(bufp, len - (bufp - buf), fp)
- == NULL) break;
- bufp += strlen(bufp);
-
- for (; bufp > buf &&
- (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
- bufp--)
- *(bufp - 1) = '\0';
-
- folded = FALSE;
- } else {
- ungetc(nexthead, fp);
- break;
- }
- }
-
- /* remove trailing return code */
- strretchomp(buf);
-
- return buf;
-}
-#endif
-
-#if 0
-GSList *procheader_get_header_list_from_file(const gchar *file)
-{
- FILE *fp;
- GSList *hlist;
-
- if ((fp = g_fopen(file, "rb")) == NULL) {
- FILE_OP_ERROR(file, "fopen");
- return NULL;
- }
-
- hlist = procheader_get_header_list(fp);
-
- fclose(fp);
- return hlist;
-}
-
-GSList *procheader_get_header_list(FILE *fp)
-{
- gchar buf[BUFFSIZE];
- GSList *hlist = NULL;
- Header *header;
-
- g_return_val_if_fail(fp != NULL, NULL);
-
- while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
- if ((header = procheader_parse_header(buf)) != NULL)
- hlist = g_slist_append(hlist, header);
- /*
- if (*buf == ':') continue;
- for (p = buf; *p && *p != ' '; p++) {
- if (*p == ':') {
- header = g_new(Header, 1);
- header->name = g_strndup(buf, p - buf);
- p++;
- while (*p == ' ' || *p == '\t') p++;
- conv_unmime_header(tmp, sizeof(tmp), p, NULL);
- header->body = g_strdup(tmp);
-
- hlist = g_slist_append(hlist, header);
- break;
- }
- }
- */
- }
-
- return hlist;
-}
-#endif
-
-#if 0
-GPtrArray *procheader_get_header_array(FILE *fp)
-{
- gchar buf[BUFFSIZE];
- GPtrArray *headers;
- Header *header;
-
- g_return_val_if_fail(fp != NULL, NULL);
-
- headers = g_ptr_array_new();
-
- while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
- if ((header = procheader_parse_header(buf)) != NULL)
- g_ptr_array_add(headers, header);
- /*
- if (*buf == ':') continue;
- for (p = buf; *p && *p != ' '; p++) {
- if (*p == ':') {
- header = g_new(Header, 1);
- header->name = g_strndup(buf, p - buf);
- p++;
- while (*p == ' ' || *p == '\t') p++;
- conv_unmime_header(tmp, sizeof(tmp), p, NULL);
- header->body = g_strdup(tmp);
-
- g_ptr_array_add(headers, header);
- break;
- }
- }
- */
- }
-
- return headers;
-}
-#endif
-
GPtrArray *procheader_get_header_array_asis(FILE *fp)
{
gchar buf[BUFFSIZE];
return headers;
}
-#if 0
-void procheader_header_list_destroy(GSList *hlist)
-{
- Header *header;
-
- while (hlist != NULL) {
- header = hlist->data;
- procheader_header_free(header);
- hlist = g_slist_remove(hlist, header);
- }
-}
-#endif
-
void procheader_header_array_destroy(GPtrArray *harray)
{
gint i;
if (msginfo->date) break;
msginfo->date_t =
procheader_date_parse(NULL, hp, 0);
- msginfo->date = g_strdup(hp);
+ if (g_utf8_validate(hp, -1, NULL)) {
+ msginfo->date = g_strdup(hp);
+ } else {
+ gchar *utf = conv_codeset_strdup(
+ hp,
+ conv_get_locale_charset_str_no_utf8(),
+ CS_INTERNAL);
+ if (utf == NULL ||
+ !g_utf8_validate(utf, -1, NULL)) {
+ g_free(utf);
+ utf = g_malloc(strlen(buf)*2+1);
+ conv_localetodisp(utf,
+ strlen(hp)*2+1, hp);
+ }
+ msginfo->date = utf;
+ }
break;
case H_FROM:
if (msginfo->from) break;