[evolution-data-server] CamelDataWrapper: Add function to construct it from data



commit 893278bd92c8d239f6eb16564f7c5156457d0039
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jul 5 20:06:55 2022 +0200

    CamelDataWrapper: Add function to construct it from data
    
    Better memory management, no need to duplicate the buffer.

 src/camel/camel-data-wrapper.c | 36 ++++++++++++++++++++++++++++++++++++
 src/camel/camel-data-wrapper.h |  6 ++++++
 src/camel/camel-mime-part.c    |  6 +-----
 3 files changed, 43 insertions(+), 5 deletions(-)
---
diff --git a/src/camel/camel-data-wrapper.c b/src/camel/camel-data-wrapper.c
index 2d463434a..d1946bc8e 100644
--- a/src/camel/camel-data-wrapper.c
+++ b/src/camel/camel-data-wrapper.c
@@ -1547,6 +1547,42 @@ camel_data_wrapper_construct_from_input_stream_finish (CamelDataWrapper *data_wr
        return g_task_propagate_boolean (G_TASK (result), error);
 }
 
+/**
+ * camel_data_wrapper_construct_from_data_sync:
+ * @data_wrapper: a #CamelDataWrapper
+ * @data: (not nullable): data to set
+ * @data_len: length of @data
+ * @cancellable: optional #GCancellable object, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Constructs the content of @data_wrapper from @data of length @data_len.
+ *
+ * Returns: %TRUE on success, %FALSE on error
+ *
+ * Since: 3.46
+ **/
+gboolean
+camel_data_wrapper_construct_from_data_sync (CamelDataWrapper *data_wrapper,
+                                            gconstpointer data,
+                                            gssize data_len,
+                                            GCancellable *cancellable,
+                                            GError **error)
+{
+       GInputStream *input_stream;
+       gboolean success;
+
+       g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), FALSE);
+       g_return_val_if_fail (data != NULL, FALSE);
+
+       input_stream = g_memory_input_stream_new_from_data (data, data_len, NULL);
+
+       success = camel_data_wrapper_construct_from_input_stream_sync (data_wrapper, input_stream, 
cancellable, error);
+
+       g_clear_object (&input_stream);
+
+       return success;
+}
+
 /**
  * camel_data_wrapper_calculate_size_sync:
  * @data_wrapper: a #CamelDataWrapper
diff --git a/src/camel/camel-data-wrapper.h b/src/camel/camel-data-wrapper.h
index 34376d924..c5bcc3051 100644
--- a/src/camel/camel-data-wrapper.h
+++ b/src/camel/camel-data-wrapper.h
@@ -231,6 +231,12 @@ gboolean   camel_data_wrapper_construct_from_input_stream_finish
                                                (CamelDataWrapper *data_wrapper,
                                                 GAsyncResult *result,
                                                 GError **error);
+gboolean       camel_data_wrapper_construct_from_data_sync
+                                               (CamelDataWrapper *data_wrapper,
+                                                gconstpointer data,
+                                                gssize data_len,
+                                                GCancellable *cancellable,
+                                                GError **error);
 gsize          camel_data_wrapper_calculate_size_sync
                                                (CamelDataWrapper *data_wrapper,
                                                 GCancellable *cancellable,
diff --git a/src/camel/camel-mime-part.c b/src/camel/camel-mime-part.c
index e3865dcc3..aebe1f8c9 100644
--- a/src/camel/camel-mime-part.c
+++ b/src/camel/camel-mime-part.c
@@ -1133,14 +1133,10 @@ camel_mime_part_set_content (CamelMimePart *mime_part,
 
        if (length) {
                CamelDataWrapper *dw;
-               CamelStream *stream;
 
                dw = camel_data_wrapper_new ();
                camel_data_wrapper_set_mime_type (dw, type);
-               stream = camel_stream_mem_new_with_buffer (data, length);
-               camel_data_wrapper_construct_from_stream_sync (
-                       dw, stream, NULL, NULL);
-               g_object_unref (stream);
+               camel_data_wrapper_construct_from_data_sync (dw, data, length, NULL, NULL);
                camel_medium_set_content (medium, dw);
                g_object_unref (dw);
        } else


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]