2006-03-26 [colin] 2.0.0cvs172
[claws.git] / src / procheader.c
index 3782d6b89db40110255b7cc5764143f16030c602..bca7e19ef8cfc72f79dbcfe6ca7eaaec65a950ee 100644 (file)
@@ -165,154 +165,6 @@ gint procheader_get_one_field_asis(gchar *buf, size_t len, FILE *fp)
                                     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];
@@ -346,19 +198,6 @@ GPtrArray *procheader_get_header_array_asis(FILE *fp)
        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;
@@ -614,7 +453,22 @@ static MsgInfo *parse_stream(void *data, gboolean isstring, MsgFlags flags,
                        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;