[evolution] Replace e_mail_part_snoop_type() with e_mail_part_guess_mime_type()
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Replace e_mail_part_snoop_type() with e_mail_part_guess_mime_type()
- Date: Mon, 10 Oct 2022 16:46:49 +0000 (UTC)
commit 9da6b53a12942dbce9c3763bb88c9dbfbc294ef4
Author: Milan Crha <mcrha redhat com>
Date: Mon Oct 10 18:44:10 2022 +0200
Replace e_mail_part_snoop_type() with e_mail_part_guess_mime_type()
The former function returned a `const gchar *`, pretending the string
is a static string, while it left the string in its own global memory,
effectively leaking it at the application end. Rather than this, return
non-const 'gchar *' and free the returned text appropriately.
src/em-format/e-mail-formatter-attachment.c | 12 ++++-----
src/em-format/e-mail-inline-filter.c | 22 +++++++++------
src/em-format/e-mail-parser-application-smime.c | 10 ++++---
src/em-format/e-mail-parser-inlinepgp-encrypted.c | 13 ++++-----
src/em-format/e-mail-parser-multipart-mixed.c | 31 +++++++++++-----------
src/em-format/e-mail-parser-text-plain.c | 12 +++++----
src/em-format/e-mail-parser.c | 26 ++++++++----------
src/em-format/e-mail-part-attachment.c | 24 +++++++++++++++++
src/em-format/e-mail-part-attachment.h | 6 ++++-
src/em-format/e-mail-part-utils.c | 31 +++++-----------------
src/em-format/e-mail-part-utils.h | 2 +-
src/em-format/e-mail-part.c | 3 ++-
.../e-mail-parser-tnef-attachment.c | 10 ++++---
13 files changed, 111 insertions(+), 91 deletions(-)
---
diff --git a/src/em-format/e-mail-formatter-attachment.c b/src/em-format/e-mail-formatter-attachment.c
index 43e5a09651..311f8bd5a0 100644
--- a/src/em-format/e-mail-formatter-attachment.c
+++ b/src/em-format/e-mail-formatter-attachment.c
@@ -113,10 +113,10 @@ emfe_attachment_format (EMailFormatterExtension *extension,
registry = e_mail_formatter_get_extension_registry (formatter);
extensions = e_mail_extension_registry_get_for_mime_type (
- registry, empa->snoop_mime_type);
+ registry, e_mail_part_attachment_get_guessed_mime_type (empa));
if (extensions == NULL)
extensions = e_mail_extension_registry_get_fallback (
- registry, empa->snoop_mime_type);
+ registry, e_mail_part_attachment_get_guessed_mime_type (empa));
/* If the attachment is requested as RAW, then call the
* handler directly and do not append any other code. */
@@ -190,7 +190,7 @@ emfe_attachment_format (EMailFormatterExtension *extension,
/* E_MAIL_FORMATTER_MODE_NORMAL: */
mime_part = e_mail_part_ref_mime_part (part);
- text = e_mail_part_describe (mime_part, empa->snoop_mime_type);
+ text = e_mail_part_describe (mime_part, e_mail_part_attachment_get_guessed_mime_type (empa));
flags = e_mail_formatter_get_text_format_flags (formatter);
html = camel_text_to_html (
text, flags & CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
@@ -200,9 +200,9 @@ emfe_attachment_format (EMailFormatterExtension *extension,
if (camel_content_type_is (content_type, "text", "*") ||
camel_content_type_is (content_type, "application", "xml") ||
- (empa->snoop_mime_type && (
- g_ascii_strncasecmp (empa->snoop_mime_type, "text/", 5) == 0 ||
- g_ascii_strcasecmp (empa->snoop_mime_type, "application/xml") == 0))) {
+ (e_mail_part_attachment_get_guessed_mime_type (empa) && (
+ g_ascii_strncasecmp (e_mail_part_attachment_get_guessed_mime_type (empa), "text/", 5) == 0 ||
+ g_ascii_strcasecmp (e_mail_part_attachment_get_guessed_mime_type (empa), "application/xml") ==
0))) {
GSettings *settings;
gsize size_limit;
diff --git a/src/em-format/e-mail-inline-filter.c b/src/em-format/e-mail-inline-filter.c
index 07df17a3c8..83d71d836b 100644
--- a/src/em-format/e-mail-inline-filter.c
+++ b/src/em-format/e-mail-inline-filter.c
@@ -98,7 +98,6 @@ inline_filter_add_part (EMailInlineFilter *emif,
CamelTransferEncoding encoding;
CamelContentType *content_type;
CamelDataWrapper *dw;
- const gchar *mimetype;
CamelMimePart *part;
CamelStream *mem;
gchar *type;
@@ -180,13 +179,20 @@ inline_filter_add_part (EMailInlineFilter *emif,
camel_mime_part_set_filename (part, emif->filename);
/* pre-snoop the mime type of unknown objects, and poke and hack it into place */
- if (camel_content_type_is (camel_data_wrapper_get_mime_type_field (dw), "application", "octet-stream")
- && (mimetype = e_mail_part_snoop_type (part))
- && strcmp (mimetype, "application/octet-stream") != 0) {
- camel_data_wrapper_set_mime_type (dw, mimetype);
- camel_mime_part_set_content_type (part, mimetype);
- if (emif->filename)
- camel_mime_part_set_filename (part, emif->filename);
+ if (camel_content_type_is (camel_data_wrapper_get_mime_type_field (dw), "application",
"octet-stream")) {
+ gchar *guessed_mime_type;
+
+ guessed_mime_type = e_mail_part_guess_mime_type (part);
+
+ if (guessed_mime_type &&
+ strcmp (guessed_mime_type, "application/octet-stream") != 0) {
+ camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
+ camel_mime_part_set_content_type (part, guessed_mime_type);
+ if (emif->filename)
+ camel_mime_part_set_filename (part, emif->filename);
+ }
+
+ g_free (guessed_mime_type);
}
g_free (emif->filename);
diff --git a/src/em-format/e-mail-parser-application-smime.c b/src/em-format/e-mail-parser-application-smime.c
index 116df4ebe8..9904b0c417 100644
--- a/src/em-format/e-mail-parser-application-smime.c
+++ b/src/em-format/e-mail-parser-application-smime.c
@@ -125,12 +125,14 @@ empe_app_smime_parse (EMailParserExtension *extension,
ct = camel_data_wrapper_get_mime_type_field (CAMEL_DATA_WRAPPER (opart));
if (!ct || camel_content_type_is (ct, "text", "plain")) {
- const gchar *mime_type;
+ gchar *guessed_mime_type;
- mime_type = e_mail_part_snoop_type (opart);
+ guessed_mime_type = e_mail_part_guess_mime_type (opart);
- if (mime_type && g_ascii_strcasecmp (mime_type, "text/plain") != 0)
- camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart), mime_type);
+ if (guessed_mime_type && g_ascii_strcasecmp (guessed_mime_type, "text/plain") != 0)
+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart),
guessed_mime_type);
+
+ g_free (guessed_mime_type);
}
e_mail_parser_parse_part (
diff --git a/src/em-format/e-mail-parser-inlinepgp-encrypted.c
b/src/em-format/e-mail-parser-inlinepgp-encrypted.c
index e342825651..caf8607085 100644
--- a/src/em-format/e-mail-parser-inlinepgp-encrypted.c
+++ b/src/em-format/e-mail-parser-inlinepgp-encrypted.c
@@ -94,19 +94,20 @@ empe_inlinepgp_encrypted_parse (EMailParserExtension *extension,
/* this ensures to show the 'opart' as inlined, if possible */
if (mime_type && g_ascii_strcasecmp (mime_type, "application/octet-stream") == 0) {
- const gchar *snoop;
+ gchar *guessed_mime_type;
- snoop = e_mail_part_snoop_type (opart);
+ guessed_mime_type = e_mail_part_guess_mime_type (opart);
- if (snoop != NULL) {
- camel_data_wrapper_set_mime_type (dw, snoop);
+ if (guessed_mime_type) {
+ camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
/* Set the MIME type on the 'opart' itself as well.
* If it's "text/plain", then we want the TextPlain
* parser extension to treat it as "text/plain" and
* NOT wrap it as an attachment. */
- camel_data_wrapper_set_mime_type (
- CAMEL_DATA_WRAPPER (opart), snoop);
+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (opart), guessed_mime_type);
+
+ g_free (guessed_mime_type);
}
}
diff --git a/src/em-format/e-mail-parser-multipart-mixed.c b/src/em-format/e-mail-parser-multipart-mixed.c
index 1912b1bd4e..53c16d1511 100644
--- a/src/em-format/e-mail-parser-multipart-mixed.c
+++ b/src/em-format/e-mail-parser-multipart-mixed.c
@@ -205,16 +205,16 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
ct = camel_content_type_ref (ct);
if (!e_mail_parser_get_parsers_for_part (parser, subpart)) {
- const gchar *snoop_type;
- CamelContentType *snoop_ct = NULL;
+ gchar *guessed_mime_type;
+ CamelContentType *guessed_ct = NULL;
- snoop_type = e_mail_part_snoop_type (subpart);
- if (snoop_type)
- snoop_ct = camel_content_type_decode (snoop_type);
+ guessed_mime_type = e_mail_part_guess_mime_type (subpart);
+ if (guessed_mime_type)
+ guessed_ct = camel_content_type_decode (guessed_mime_type);
- if (snoop_ct && snoop_ct->type && snoop_ct->subtype && (
- !ct || g_ascii_strcasecmp (snoop_ct->type, ct->type) != 0 ||
- g_ascii_strcasecmp (snoop_ct->subtype, ct->subtype) != 0)) {
+ if (guessed_ct && guessed_ct->type && guessed_ct->subtype && (
+ !ct || g_ascii_strcasecmp (guessed_ct->type, ct->type) != 0 ||
+ g_ascii_strcasecmp (guessed_ct->subtype, ct->subtype) != 0)) {
CamelStream *mem_stream;
mem_stream = camel_stream_mem_new ();
@@ -229,7 +229,7 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
opart = camel_mime_part_new ();
dw = camel_data_wrapper_new ();
- camel_data_wrapper_set_mime_type (dw, snoop_type);
+ camel_data_wrapper_set_mime_type (dw, guessed_mime_type);
if (camel_data_wrapper_construct_from_stream_sync (dw, mem_stream,
cancellable, NULL)) {
const gchar *disposition;
@@ -244,17 +244,17 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
if (ct && ct->params) {
CamelHeaderParam *param;
for (param = ct->params; param; param = param->next) {
- camel_content_type_set_param (snoop_ct,
param->name, param->value);
+ camel_content_type_set_param (guessed_ct,
param->name, param->value);
}
}
- camel_content_type_set_param (snoop_ct,
E_MAIL_PART_X_EVOLUTION_GUESSED, "1");
- camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER
(opart), snoop_ct);
+ camel_content_type_set_param (guessed_ct,
E_MAIL_PART_X_EVOLUTION_GUESSED, "1");
+ camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER
(opart), guessed_ct);
handled = e_mail_parser_parse_part (parser, opart, part_id,
cancellable, &work_queue);
if (handled) {
camel_content_type_unref (ct);
- ct = camel_content_type_ref (snoop_ct);
+ ct = camel_content_type_ref (guessed_ct);
}
}
@@ -265,8 +265,9 @@ empe_mp_mixed_parse (EMailParserExtension *extension,
g_object_unref (mem_stream);
}
- if (snoop_ct)
- camel_content_type_unref (snoop_ct);
+ if (guessed_ct)
+ camel_content_type_unref (guessed_ct);
+ g_free (guessed_mime_type);
}
if (!handled) {
diff --git a/src/em-format/e-mail-parser-text-plain.c b/src/em-format/e-mail-parser-text-plain.c
index 3d936627a5..4695eae607 100644
--- a/src/em-format/e-mail-parser-text-plain.c
+++ b/src/em-format/e-mail-parser-text-plain.c
@@ -113,7 +113,7 @@ empe_text_plain_parse (EMailParserExtension *extension,
gint ii, count;
EMailInlineFilter *inline_filter;
gboolean charset_added = FALSE;
- const gchar *snoop_type = NULL;
+ gchar *guessed_mime_type = NULL;
gboolean is_attachment;
gboolean handled = FALSE;
@@ -127,16 +127,18 @@ empe_text_plain_parse (EMailParserExtension *extension,
/* FIXME: We should discard this multipart if it only contains
* the original text, but it makes this hash lookup more complex */
if (!camel_data_wrapper_get_mime_type_field (dw))
- snoop_type = e_mail_part_snoop_type (part);
+ guessed_mime_type = e_mail_part_guess_mime_type (part);
- /* if we had to snoop the part type to get here, then
+ /* if we had to guess the part type to get here, then
* use that as the base type, yuck */
- if (snoop_type == NULL
- || (type = camel_content_type_decode (snoop_type)) == NULL) {
+ if (guessed_mime_type == NULL ||
+ (type = camel_content_type_decode (guessed_mime_type)) == NULL) {
type = camel_data_wrapper_get_mime_type_field (dw);
camel_content_type_ref (type);
}
+ g_clear_pointer (&guessed_mime_type, g_free);
+
if (camel_data_wrapper_get_mime_type_field (dw) && type != camel_data_wrapper_get_mime_type_field
(dw) &&
camel_content_type_param (camel_data_wrapper_get_mime_type_field (dw), "charset")) {
camel_content_type_set_param (type, "charset", camel_content_type_param
(camel_data_wrapper_get_mime_type_field (dw), "charset"));
diff --git a/src/em-format/e-mail-parser.c b/src/em-format/e-mail-parser.c
index ad7c1d56ce..4e601c94ef 100644
--- a/src/em-format/e-mail-parser.c
+++ b/src/em-format/e-mail-parser.c
@@ -791,10 +791,9 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
EMailPartAttachment *empa;
EAttachment *attachment;
EMailPart *first_part;
- const gchar *snoop_mime_type;
+ gchar *guessed_mime_type = NULL;
GQueue *extensions;
CamelContentType *ct;
- gchar *mime_type;
CamelDataWrapper *dw;
GByteArray *ba;
gsize size;
@@ -802,9 +801,10 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
ct = camel_mime_part_get_content_type (part);
extensions = NULL;
- snoop_mime_type = NULL;
if (ct) {
EMailExtensionRegistry *reg;
+ gchar *mime_type;
+
mime_type = camel_content_type_simple (ct);
reg = e_mail_parser_get_extension_registry (parser);
@@ -813,25 +813,22 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
if (camel_content_type_is (ct, "text", "*") ||
camel_content_type_is (ct, "message", "*"))
- snoop_mime_type = mime_type;
+ guessed_mime_type = mime_type;
else
g_free (mime_type);
}
- if (!snoop_mime_type)
- snoop_mime_type = e_mail_part_snoop_type (part);
+ if (!guessed_mime_type)
+ guessed_mime_type = e_mail_part_guess_mime_type (part);
if (!extensions) {
EMailExtensionRegistry *reg;
reg = e_mail_parser_get_extension_registry (parser);
- extensions = e_mail_extension_registry_get_for_mime_type (
- reg, snoop_mime_type);
+ extensions = e_mail_extension_registry_get_for_mime_type (reg, guessed_mime_type);
- if (!extensions) {
- extensions = e_mail_extension_registry_get_fallback (
- reg, snoop_mime_type);
- }
+ if (!extensions)
+ extensions = e_mail_extension_registry_get_fallback (reg, guessed_mime_type);
}
part_id_len = part_id->len;
@@ -840,7 +837,7 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
empa = e_mail_part_attachment_new (part, part_id->str);
empa->shown = extensions && (!g_queue_is_empty (extensions) &&
e_mail_part_is_inline (part, extensions));
- empa->snoop_mime_type = snoop_mime_type;
+ e_mail_part_attachment_take_guessed_mime_type (empa, guessed_mime_type);
first_part = g_queue_peek_head (parts_queue);
if (first_part != NULL && !E_IS_MAIL_PART_ATTACHMENT (first_part)) {
@@ -883,8 +880,7 @@ e_mail_parser_wrap_as_attachment (EMailParser *parser,
if (file_info == NULL) {
file_info = g_file_info_new ();
- g_file_info_set_content_type (
- file_info, empa->snoop_mime_type);
+ g_file_info_set_content_type (file_info, e_mail_part_attachment_get_guessed_mime_type
(empa));
}
g_file_info_set_size (file_info, size);
diff --git a/src/em-format/e-mail-part-attachment.c b/src/em-format/e-mail-part-attachment.c
index 3490c3d7e5..f9f2c97615 100644
--- a/src/em-format/e-mail-part-attachment.c
+++ b/src/em-format/e-mail-part-attachment.c
@@ -23,6 +23,7 @@
struct _EMailPartAttachmentPrivate {
EAttachment *attachment;
+ gchar *guessed_mime_type;
gboolean expandable;
};
@@ -99,6 +100,7 @@ mail_part_attachment_finalize (GObject *object)
EMailPartAttachment *part = E_MAIL_PART_ATTACHMENT (object);
g_free (part->part_id_with_attachment);
+ g_free (part->priv->guessed_mime_type);
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (e_mail_part_attachment_parent_class)->
@@ -226,3 +228,25 @@ e_mail_part_attachment_get_expandable (EMailPartAttachment *part)
return part->priv->expandable;
}
+
+void
+e_mail_part_attachment_take_guessed_mime_type (EMailPartAttachment *part,
+ gchar *guessed_mime_type)
+{
+ g_return_if_fail (E_IS_MAIL_PART_ATTACHMENT (part));
+
+ if (g_strcmp0 (guessed_mime_type, part->priv->guessed_mime_type) != 0) {
+ g_free (part->priv->guessed_mime_type);
+ part->priv->guessed_mime_type = guessed_mime_type;
+ } else if (guessed_mime_type != part->priv->guessed_mime_type) {
+ g_free (guessed_mime_type);
+ }
+}
+
+const gchar *
+e_mail_part_attachment_get_guessed_mime_type (EMailPartAttachment *part)
+{
+ g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT (part), NULL);
+
+ return part->priv->guessed_mime_type;
+}
diff --git a/src/em-format/e-mail-part-attachment.h b/src/em-format/e-mail-part-attachment.h
index 818ab30d4f..d94dca41c9 100644
--- a/src/em-format/e-mail-part-attachment.h
+++ b/src/em-format/e-mail-part-attachment.h
@@ -55,7 +55,6 @@ struct _EMailPartAttachment {
gchar *part_id_with_attachment;
gboolean shown;
- const gchar *snoop_mime_type;
};
struct _EMailPartAttachmentClass {
@@ -73,6 +72,11 @@ void e_mail_part_attachment_set_expandable
gboolean expandable);
gboolean e_mail_part_attachment_get_expandable
(EMailPartAttachment *part);
+void e_mail_part_attachment_take_guessed_mime_type
+ (EMailPartAttachment *part,
+ gchar *guessed_mime_type);
+const gchar * e_mail_part_attachment_get_guessed_mime_type
+ (EMailPartAttachment *part);
G_END_DECLS
diff --git a/src/em-format/e-mail-part-utils.c b/src/em-format/e-mail-part-utils.c
index c6aa91ac5c..0259f60067 100644
--- a/src/em-format/e-mail-part-utils.c
+++ b/src/em-format/e-mail-part-utils.c
@@ -173,21 +173,18 @@ e_mail_part_get_frame_security_style (EMailPart *part)
}
/**
- * e_mail_part_snoop_type:
+ * e_mail_part_guess_mime_type:
* @part: a #CamelMimePart
*
- * Tries to snoop the mime type of a part.
+ * Tries to guess the mime type of a part.
*
- * Return value: %NULL if unknown (more likely application/octet-stream).
+ * Returns: (transfer full): %NULL if unknown (more likely application/octet-stream).
**/
-const gchar *
-e_mail_part_snoop_type (CamelMimePart *part)
+gchar *
+e_mail_part_guess_mime_type (CamelMimePart *part)
{
- /* cache is here only to be able still return const gchar * */
- static GHashTable *types_cache = NULL;
-
const gchar *filename;
- gchar *name_type = NULL, *magic_type = NULL, *res, *tmp;
+ gchar *name_type = NULL, *magic_type = NULL, *res;
CamelDataWrapper *dw;
filename = camel_mime_part_get_filename (part);
@@ -241,22 +238,6 @@ e_mail_part_snoop_type (CamelMimePart *part)
if (res != magic_type)
g_free (magic_type);
- if (!types_cache)
- types_cache = g_hash_table_new_full (
- g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) NULL);
-
- if (res) {
- tmp = g_hash_table_lookup (types_cache, res);
- if (tmp) {
- g_free (res);
- res = tmp;
- } else {
- g_hash_table_insert (types_cache, res, res);
- }
- }
-
d (printf ("Snooped mime type %s\n", res));
return res;
diff --git a/src/em-format/e-mail-part-utils.h b/src/em-format/e-mail-part-utils.h
index 74f057dd55..43403f5fb5 100644
--- a/src/em-format/e-mail-part-utils.h
+++ b/src/em-format/e-mail-part-utils.h
@@ -31,7 +31,7 @@ gboolean e_mail_part_is_secured (CamelMimePart *part);
const gchar * e_mail_part_get_frame_security_style
(EMailPart *part);
-const gchar * e_mail_part_snoop_type (CamelMimePart *part);
+gchar * e_mail_part_guess_mime_type (CamelMimePart *part);
gboolean e_mail_part_is_attachment (CamelMimePart *part);
diff --git a/src/em-format/e-mail-part.c b/src/em-format/e-mail-part.c
index 53499f2488..32e7f7f71b 100644
--- a/src/em-format/e-mail-part.c
+++ b/src/em-format/e-mail-part.c
@@ -540,8 +540,9 @@ e_mail_part_should_show_inline (EMailPart *part)
if (E_IS_MAIL_PART_ATTACHMENT (part)) {
EMailPartAttachment *empa = E_MAIL_PART_ATTACHMENT (part);
+ const gchar *guessed_mime_type = e_mail_part_attachment_get_guessed_mime_type (empa);
- if (g_strcmp0 (empa->snoop_mime_type, "message/rfc822") == 0)
+ if (guessed_mime_type && g_ascii_strcasecmp (guessed_mime_type, "message/rfc822") == 0)
return TRUE;
}
diff --git a/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
b/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
index d6e07532f9..aa8a557b68 100644
--- a/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
+++ b/src/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
@@ -185,7 +185,7 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
CamelDataWrapper *content;
CamelStream *stream;
gchar *path;
- const gchar *type;
+ gchar *guessed_mime_type;
if (!strcmp (d->d_name, ".")
|| !strcmp (d->d_name, "..")
@@ -206,9 +206,11 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
camel_medium_set_content ((CamelMedium *) part, content);
g_object_unref (content);
- type = e_mail_part_snoop_type (part);
- if (type)
- camel_data_wrapper_set_mime_type ((CamelDataWrapper *) part, type);
+ guessed_mime_type = e_mail_part_guess_mime_type (part);
+ if (guessed_mime_type) {
+ camel_data_wrapper_set_mime_type ((CamelDataWrapper *) part, guessed_mime_type);
+ g_free (guessed_mime_type);
+ }
camel_mime_part_set_filename (part, d->d_name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]