#include <stdio.h>
#include <glib.h>
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <sys/stat.h>
#include <unistd.h>
-#include "intl.h"
#include "procmime.h"
#include "procheader.h"
#include "base64.h"
gchar *filename;
MimeInfo *mimeinfo;
- filename = procmsg_get_message_file(msginfo);
- if (!filename)
+ filename = procmsg_get_message_file_path(msginfo);
+ if (!filename || !is_file_exist(filename)) {
+ g_free(filename);
+ filename = procmsg_get_message_file(msginfo);
+ }
+ if (!filename || !is_file_exist(filename))
return NULL;
+
if (msginfo->folder->stype != F_QUEUE &&
msginfo->folder->stype != F_DRAFT)
mimeinfo = procmime_scan_file(filename);
gchar *tmp_file = NULL;
if (mimeinfo->type == MIMETYPE_TEXT ||
- mimeinfo->type == MIMETYPE_MESSAGE) {
- tmp_file = get_tmp_file();
- if (canonicalize_file(mimeinfo->data.filename, tmp_file) < 0) {
- g_free(tmp_file);
- fclose(infp);
- }
- if ((tmp_fp = fopen(tmp_file, "rb")) == NULL) {
- FILE_OP_ERROR(tmp_file, "fopen");
- unlink(tmp_file);
- g_free(tmp_file);
+ mimeinfo->type == MIMETYPE_MESSAGE) {
+ if (mimeinfo->content == MIMECONTENT_FILE) {
+ tmp_file = get_tmp_file();
+ if (canonicalize_file(mimeinfo->data.filename, tmp_file) < 0) {
+ g_free(tmp_file);
+ fclose(infp);
+ return FALSE;
+ }
+ if ((tmp_fp = fopen(tmp_file, "rb")) == NULL) {
+ FILE_OP_ERROR(tmp_file, "fopen");
+ unlink(tmp_file);
+ g_free(tmp_file);
+ fclose(infp);
+ return FALSE;
+ }
+ } else {
+ gchar *out = canonicalize_str(mimeinfo->data.mem);
fclose(infp);
+ infp = str_open_as_stream(out);
+ g_free(out);
+ if (infp == NULL)
+ return FALSE;
}
}
while (fgets(inbuf, sizeof(inbuf), infp) != NULL) {
qp_encode_line(outbuf, inbuf);
- fputs(outbuf, outfp);
+
+ if (!strncmp("From ", outbuf, sizeof("From ")-1)) {
+ gchar *tmpbuf = outbuf;
+
+ tmpbuf += sizeof("From ")-1;
+
+ fputs("=46rom ", outfp);
+ fputs(tmpbuf, outfp);
+ } else
+ fputs(outbuf, outfp);
}
} else {
gchar buf[BUFFSIZE];
g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++);
if ((mimeinfo->type == MIMETYPE_TEXT) && !g_ascii_strcasecmp(mimeinfo->subtype, "html"))
- base = "mimetmp.html";
+ base = g_strdup("mimetmp.html");
else {
const gchar *basetmp;
- gchar *basename;
basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "filename");
if (basetmp == NULL)
basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "name");
if (basetmp == NULL)
basetmp = "mimetmp";
- basename = g_path_get_basename(basetmp);
- if (*base == '\0') base = "mimetmp";
- Xstrdup_a(base, basename, {g_free(basename); return NULL;});
+ base = g_path_get_basename(basetmp);
+ if (*base == '\0') base = g_strdup("mimetmp");
subst_for_shellsafe_filename(base);
- g_free(basename);
}
filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
f_prefix, base, NULL);
+ g_free(base);
return filename;
}
MimeInfo *subinfo;
subinfo = procmime_mimeinfo_new();
+ subinfo->content = MIMECONTENT_FILE;
subinfo->encoding_type = ENC_UNKNOWN;
subinfo->type = MIMETYPE_TEXT;
subinfo->subtype = g_strdup("plain");
case ENC_AS_EXTENDED:
g_string_append_printf(buf, "%s*=%s''", param,
- conv_get_current_charset_str());
+ conv_get_locale_charset_str());
for (valpos = val; *valpos != '\0'; valpos++) {
if (IS_ASCII(*valpos) && isalnum(*valpos)) {
g_string_append_printf(buf, "%c", *valpos);