diff options
-rw-r--r-- | camel/ChangeLog | 20 | ||||
-rw-r--r-- | camel/camel-data-wrapper.c | 5 | ||||
-rw-r--r-- | camel/camel-mime-part.c | 213 | ||||
-rw-r--r-- | camel/camel-multipart.c | 248 | ||||
-rw-r--r-- | camel/camel-simple-data-wrapper.c | 86 | ||||
-rw-r--r-- | camel/camel-simple-data-wrapper.h | 2 | ||||
-rw-r--r-- | camel/camel-stream-b64.c | 9 | ||||
-rw-r--r-- | camel/camel-stream-fs.c | 21 | ||||
-rw-r--r-- | tests/test1.c | 20 |
9 files changed, 347 insertions, 277 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 862a84656b..04d158b4f6 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,25 @@ 2000-03-02 bertrand <bertrand@helixcode.com> + * camel-stream-b64.c (my_read_encode): don't forget to + set the state to 0 after 3. + (my_read_encode): don't forget to encode, even in state 3. + + * camel-simple-data-wrapper.c: static functions are prefixed + with my_ instead of _ + * camel-multipart.c: static functions are prefixed + with my_ instead of _ + (my_write_to_stream): commented. + (my_write_to_stream): warning in case the boudary is set + but is a zero length string. + + * camel-mime-part.c (camel_mime_part_encoding_from_string): + remove debug trace. + + * camel-mime-part.c: Replaced all static functions + with name begining with _ by the same name begining + with "my_" to prevent the possible conflicts + with system symbols Dan warned us about. + * camel-stream-b64.c (camel_stream_b64_write_to_stream): use CamelStreamB64 type for the input stream. diff --git a/camel/camel-data-wrapper.c b/camel/camel-data-wrapper.c index 7110adcc60..cd4fcce7de 100644 --- a/camel/camel-data-wrapper.c +++ b/camel/camel-data-wrapper.c @@ -146,6 +146,9 @@ my_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { g_assert (data_wrapper); data_wrapper->input_stream = stream; + if (!data_wrapper->output_stream && stream) + data_wrapper->output_stream = stream; + if (stream) gtk_object_ref (GTK_OBJECT (stream)); } @@ -252,7 +255,7 @@ my_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) nb_read = camel_stream_read (output_stream, tmp_buf, 4096); nb_written = 0; while (nb_written < nb_read) - nb_written += camel_stream_write (stream, tmp_buf, nb_read); + nb_written += camel_stream_write (stream, tmp_buf + nb_written, nb_read - nb_written); } } diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c index 7244ab3c0d..57b2659ffb 100644 --- a/camel/camel-mime-part.c +++ b/camel/camel-mime-part.c @@ -67,61 +67,61 @@ static CamelMediumClass *parent_class=NULL; #define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass) /* from GtkObject */ -static void _finalize (GtkObject *object); +static void my_finalize (GtkObject *object); /* from CamelDataWrapper */ -static void _write_to_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static void _construct_from_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static void _set_input_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static CamelStream * _get_output_stream (CamelDataWrapper *data_wrapper); +static void my_write_to_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static void my_construct_from_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static void my_set_input_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static CamelStream * my_get_output_stream (CamelDataWrapper *data_wrapper); /* from CamelMedia */ -static void _add_header (CamelMedium *medium, - gchar *header_name, - gchar *header_value); +static void my_add_header (CamelMedium *medium, + gchar *header_name, + gchar *header_value); -static void _set_content_object (CamelMedium *medium, - CamelDataWrapper *content); -static CamelDataWrapper *_get_content_object (CamelMedium *medium); +static void my_set_content_object (CamelMedium *medium, + CamelDataWrapper *content); +static CamelDataWrapper *my_get_content_object (CamelMedium *medium); /* from CamelMimePart */ -static void _set_description (CamelMimePart *mime_part, - const gchar *description); -static const gchar * _get_description (CamelMimePart *mime_part); -static void _set_disposition (CamelMimePart *mime_part, - const gchar *disposition); -static const gchar * _get_disposition (CamelMimePart *mime_part); -static void _set_filename (CamelMimePart *mime_part, - gchar *filename); -static const gchar * _get_filename (CamelMimePart *mime_part); -static void _set_content_id (CamelMimePart *mime_part, - gchar *content_id); -static const gchar * _get_content_id (CamelMimePart *mime_part); -static void _set_content_MD5 (CamelMimePart *mime_part, - gchar *content_MD5); -static const gchar * _get_content_MD5 (CamelMimePart *mime_part); -static void _set_encoding (CamelMimePart *mime_part, - CamelMimePartEncodingType encoding); -static CamelMimePartEncodingType _get_encoding (CamelMimePart *mime_part); -static void _set_content_languages (CamelMimePart *mime_part, - GList *content_languages); -static const GList * _get_content_languages (CamelMimePart *mime_part); -static void _set_header_lines (CamelMimePart *mime_part, - GList *header_lines); -static const GList * _get_header_lines (CamelMimePart *mime_part); -static void _set_content_type (CamelMimePart *mime_part, - const gchar *content_type); -static GMimeContentField *_get_content_type (CamelMimePart *mime_part); - -static gboolean _parse_header_pair (CamelMimePart *mime_part, - gchar *header_name, - gchar *header_value); +static void my_set_description (CamelMimePart *mime_part, + const gchar *description); +static const gchar * my_get_description (CamelMimePart *mime_part); +static void my_set_disposition (CamelMimePart *mime_part, + const gchar *disposition); +static const gchar * my_get_disposition (CamelMimePart *mime_part); +static void my_set_filename (CamelMimePart *mime_part, + gchar *filename); +static const gchar * my_get_filename (CamelMimePart *mime_part); +static void my_set_content_id (CamelMimePart *mime_part, + gchar *content_id); +static const gchar * my_get_content_id (CamelMimePart *mime_part); +static void my_set_content_MD5 (CamelMimePart *mime_part, + gchar *content_MD5); +static const gchar * my_get_content_MD5 (CamelMimePart *mime_part); +static void my_set_encoding (CamelMimePart *mime_part, + CamelMimePartEncodingType encoding); +static CamelMimePartEncodingType my_get_encoding (CamelMimePart *mime_part); +static void my_set_content_languages (CamelMimePart *mime_part, + GList *content_languages); +static const GList * my_get_content_languages (CamelMimePart *mime_part); +static void my_set_header_lines (CamelMimePart *mime_part, + GList *header_lines); +static const GList * my_get_header_lines (CamelMimePart *mime_part); +static void my_set_content_type (CamelMimePart *mime_part, + const gchar *content_type); +static GMimeContentField *my_get_content_type (CamelMimePart *mime_part); + +static gboolean my_parse_header_pair (CamelMimePart *mime_part, + gchar *header_name, + gchar *header_value); @@ -129,7 +129,7 @@ static gboolean _parse_header_pair (CamelMimePart *mime_part, /* recognize and associate them with a unique enum */ /* identifier (see CamelHeaderType above) */ static void -_init_header_name_table() +my_init_header_name_table() { header_name_table = g_hash_table_new (g_strcase_hash, g_strcase_equal); g_hash_table_insert (header_name_table, "Content-Description", (gpointer)HEADER_DESCRIPTION); @@ -149,41 +149,41 @@ camel_mime_part_class_init (CamelMimePartClass *camel_mime_part_class) GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_data_wrapper_class); parent_class = gtk_type_class (camel_medium_get_type ()); - _init_header_name_table(); + my_init_header_name_table(); /* virtual method definition */ - camel_mime_part_class->set_description = _set_description; - camel_mime_part_class->get_description = _get_description; - camel_mime_part_class->set_disposition = _set_disposition; - camel_mime_part_class->get_disposition = _get_disposition; - camel_mime_part_class->set_filename = _set_filename; - camel_mime_part_class->get_filename = _get_filename; - camel_mime_part_class->set_content_id = _set_content_id; - camel_mime_part_class->get_content_id = _get_content_id; - camel_mime_part_class->set_content_MD5 = _set_content_MD5; - camel_mime_part_class->get_content_MD5 = _get_content_MD5; - camel_mime_part_class->set_encoding = _set_encoding; - camel_mime_part_class->get_encoding = _get_encoding; - camel_mime_part_class->set_content_languages = _set_content_languages; - camel_mime_part_class->get_content_languages = _get_content_languages; - camel_mime_part_class->set_header_lines = _set_header_lines; - camel_mime_part_class->get_header_lines = _get_header_lines; - camel_mime_part_class->set_content_type = _set_content_type; - camel_mime_part_class->get_content_type = _get_content_type; + camel_mime_part_class->set_description = my_set_description; + camel_mime_part_class->get_description = my_get_description; + camel_mime_part_class->set_disposition = my_set_disposition; + camel_mime_part_class->get_disposition = my_get_disposition; + camel_mime_part_class->set_filename = my_set_filename; + camel_mime_part_class->get_filename = my_get_filename; + camel_mime_part_class->set_content_id = my_set_content_id; + camel_mime_part_class->get_content_id = my_get_content_id; + camel_mime_part_class->set_content_MD5 = my_set_content_MD5; + camel_mime_part_class->get_content_MD5 = my_get_content_MD5; + camel_mime_part_class->set_encoding = my_set_encoding; + camel_mime_part_class->get_encoding = my_get_encoding; + camel_mime_part_class->set_content_languages = my_set_content_languages; + camel_mime_part_class->get_content_languages = my_get_content_languages; + camel_mime_part_class->set_header_lines = my_set_header_lines; + camel_mime_part_class->get_header_lines = my_get_header_lines; + camel_mime_part_class->set_content_type = my_set_content_type; + camel_mime_part_class->get_content_type = my_get_content_type; - camel_mime_part_class->parse_header_pair = _parse_header_pair; + camel_mime_part_class->parse_header_pair = my_parse_header_pair; /* virtual method overload */ - camel_medium_class->add_header = _add_header; - camel_medium_class->set_content_object = _set_content_object; - camel_medium_class->get_content_object = _get_content_object; + camel_medium_class->add_header = my_add_header; + camel_medium_class->set_content_object = my_set_content_object; + camel_medium_class->get_content_object = my_get_content_object; - camel_data_wrapper_class->write_to_stream = _write_to_stream; - camel_data_wrapper_class->construct_from_stream = _construct_from_stream; - camel_data_wrapper_class->set_input_stream = _set_input_stream; - camel_data_wrapper_class->get_output_stream = _get_output_stream; + camel_data_wrapper_class->write_to_stream = my_write_to_stream; + camel_data_wrapper_class->construct_from_stream = my_construct_from_stream; + camel_data_wrapper_class->set_input_stream = my_set_input_stream; + camel_data_wrapper_class->get_output_stream = my_get_output_stream; - gtk_object_class->finalize = _finalize; + gtk_object_class->finalize = my_finalize; } static void @@ -234,7 +234,7 @@ camel_mime_part_get_type (void) static void -_finalize (GtkObject *object) +my_finalize (GtkObject *object) { CamelMimePart *mime_part = CAMEL_MIME_PART (object); @@ -261,7 +261,7 @@ _finalize (GtkObject *object) /* **** */ static void -_add_header (CamelMedium *medium, gchar *header_name, gchar *header_value) +my_add_header (CamelMedium *medium, gchar *header_name, gchar *header_value) { CamelMimePart *mime_part = CAMEL_MIME_PART (medium); @@ -278,7 +278,7 @@ _add_header (CamelMedium *medium, gchar *header_name, gchar *header_value) static void -_set_description (CamelMimePart *mime_part, const gchar *description) +my_set_description (CamelMimePart *mime_part, const gchar *description) { g_free (mime_part->description); mime_part->description = g_strdup (description); @@ -297,7 +297,7 @@ camel_mime_part_set_description (CamelMimePart *mime_part, const gchar *descript static const gchar * -_get_description (CamelMimePart *mime_part) +my_get_description (CamelMimePart *mime_part) { return mime_part->description; } @@ -314,7 +314,7 @@ camel_mime_part_get_description (CamelMimePart *mime_part) static void -_set_disposition (CamelMimePart *mime_part, const gchar *disposition) +my_set_disposition (CamelMimePart *mime_part, const gchar *disposition) { #warning Do not use MimeContentfield here !!! @@ -338,7 +338,7 @@ camel_mime_part_set_disposition (CamelMimePart *mime_part, const gchar *disposit static const gchar * -_get_disposition (CamelMimePart *mime_part) +my_get_disposition (CamelMimePart *mime_part) { if (!mime_part->disposition) return NULL; return (mime_part->disposition)->type; @@ -354,7 +354,7 @@ camel_mime_part_get_disposition (CamelMimePart *mime_part) static void -_set_filename (CamelMimePart *mime_part, gchar *filename) +my_set_filename (CamelMimePart *mime_part, gchar *filename) { g_free(mime_part->filename); mime_part->filename = filename; @@ -373,7 +373,7 @@ camel_mime_part_set_filename (CamelMimePart *mime_part, gchar *filename) static const gchar * -_get_filename (CamelMimePart *mime_part) +my_get_filename (CamelMimePart *mime_part) { return mime_part->filename; } @@ -391,7 +391,7 @@ camel_mime_part_get_filename (CamelMimePart *mime_part) /* this routine must not be public */ static void -_set_content_id (CamelMimePart *mime_part, gchar *content_id) +my_set_content_id (CamelMimePart *mime_part, gchar *content_id) { g_free(mime_part->content_id); mime_part->content_id = content_id; @@ -399,7 +399,7 @@ _set_content_id (CamelMimePart *mime_part, gchar *content_id) static const gchar * -_get_content_id (CamelMimePart *mime_part) +my_get_content_id (CamelMimePart *mime_part) { return mime_part->content_id; } @@ -417,7 +417,7 @@ camel_mime_part_get_content_id (CamelMimePart *mime_part) /* this routine must not be public */ static void -_set_content_MD5 (CamelMimePart *mime_part, gchar *content_MD5) +my_set_content_MD5 (CamelMimePart *mime_part, gchar *content_MD5) { g_free(mime_part->content_MD5); mime_part->content_MD5 = content_MD5; @@ -428,7 +428,7 @@ _set_content_MD5 (CamelMimePart *mime_part, gchar *content_MD5) static const gchar * -_get_content_MD5 (CamelMimePart *mime_part) +my_get_content_MD5 (CamelMimePart *mime_part) { return mime_part->content_MD5; } @@ -445,7 +445,7 @@ camel_mime_part_get_content_MD5 (CamelMimePart *mime_part) static void -_set_encoding (CamelMimePart *mime_part, CamelMimePartEncodingType encoding) +my_set_encoding (CamelMimePart *mime_part, CamelMimePartEncodingType encoding) { mime_part->encoding = encoding; } @@ -463,7 +463,7 @@ camel_mime_part_set_encoding (CamelMimePart *mime_part, static CamelMimePartEncodingType -_get_encoding (CamelMimePart *mime_part) +my_get_encoding (CamelMimePart *mime_part) { return mime_part->encoding; } @@ -481,7 +481,7 @@ camel_mime_part_get_encoding (CamelMimePart *mime_part) static void -_set_content_languages (CamelMimePart *mime_part, GList *content_languages) +my_set_content_languages (CamelMimePart *mime_part, GList *content_languages) { if (mime_part->content_languages) string_list_free (mime_part->content_languages); mime_part->content_languages = content_languages; @@ -499,7 +499,7 @@ camel_mime_part_set_content_languages (CamelMimePart *mime_part, GList *content_ static const GList * -_get_content_languages (CamelMimePart *mime_part) +my_get_content_languages (CamelMimePart *mime_part) { return mime_part->content_languages; } @@ -517,7 +517,7 @@ camel_mime_part_get_content_languages (CamelMimePart *mime_part) static void -_set_header_lines (CamelMimePart *mime_part, GList *header_lines) +my_set_header_lines (CamelMimePart *mime_part, GList *header_lines) { if (mime_part->header_lines) string_list_free (mime_part->header_lines); mime_part->header_lines = header_lines; @@ -535,7 +535,7 @@ camel_mime_part_set_header_lines (CamelMimePart *mime_part, GList *header_lines) static const GList * -_get_header_lines (CamelMimePart *mime_part) +my_get_header_lines (CamelMimePart *mime_part) { return mime_part->header_lines; } @@ -554,7 +554,7 @@ camel_mime_part_get_header_lines (CamelMimePart *mime_part) static void -_set_content_type (CamelMimePart *mime_part, const gchar *content_type) +my_set_content_type (CamelMimePart *mime_part, const gchar *content_type) { g_assert (content_type); gmime_content_field_construct_from_string (mime_part->content_type, content_type); @@ -570,7 +570,7 @@ camel_mime_part_set_content_type (CamelMimePart *mime_part, gchar *content_type) static GMimeContentField * -_get_content_type (CamelMimePart *mime_part) +my_get_content_type (CamelMimePart *mime_part) { return mime_part->content_type; } @@ -586,7 +586,7 @@ camel_mime_part_get_content_type (CamelMimePart *mime_part) static void -_set_content_object (CamelMedium *medium, CamelDataWrapper *content) +my_set_content_object (CamelMedium *medium, CamelDataWrapper *content) { CamelMimePart *mime_part = CAMEL_MIME_PART (medium); GMimeContentField *object_content_field; @@ -603,7 +603,7 @@ _set_content_object (CamelMedium *medium, CamelDataWrapper *content) } static CamelDataWrapper * -_get_content_object (CamelMedium *medium) +my_get_content_object (CamelMedium *medium) { CamelMimePart *mime_part = CAMEL_MIME_PART (medium); CamelStream *stream; @@ -657,7 +657,7 @@ _get_content_object (CamelMedium *medium) static void -_write_content_to_stream (CamelMimePart *mime_part, CamelStream *stream) +my_write_content_to_stream (CamelMimePart *mime_part, CamelStream *stream) { CamelMedium *medium = CAMEL_MEDIUM (mime_part); CamelStream *wrapper_stream; @@ -700,7 +700,7 @@ _write_content_to_stream (CamelMimePart *mime_part, CamelStream *stream) static void -_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMimePart *mp = CAMEL_MIME_PART (data_wrapper); CamelMedium *medium = CAMEL_MEDIUM (data_wrapper); @@ -728,7 +728,7 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) gmime_content_field_write_to_stream (mp->content_type, stream); camel_stream_write_string(stream,"\n"); - _write_content_to_stream (mp, stream); + my_write_content_to_stream (mp, stream); } @@ -738,7 +738,7 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) /* mime part parsing */ static gboolean -_parse_header_pair (CamelMimePart *mime_part, gchar *header_name, gchar *header_value) +my_parse_header_pair (CamelMimePart *mime_part, gchar *header_name, gchar *header_value) { CamelHeaderType header_type; gboolean header_handled = FALSE; @@ -817,7 +817,7 @@ _parse_header_pair (CamelMimePart *mime_part, gchar *header_name, gchar *header_ static void -_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper); @@ -834,7 +834,7 @@ _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) static void -_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper); CamelSeekableStream *seekable_stream; @@ -866,13 +866,19 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) static CamelStream * -_get_output_stream (CamelDataWrapper *data_wrapper) +my_get_output_stream (CamelDataWrapper *data_wrapper) { CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper); CamelStream *input_stream; CamelStream *output_stream; /* ** FIXME : bogus bogus bogus - test test test */ + return NULL; + + /* + * For the moment, we do not use this routine on + * mime parts. Maybe later. + */ CAMEL_LOG_FULL_DEBUG ("CamelMimePart::get_output_stream leaving\n"); input_stream = camel_data_wrapper_get_input_stream (data_wrapper); @@ -925,7 +931,6 @@ camel_mime_part_encoding_to_string (CamelMimePartEncodingType encoding) CamelMimePartEncodingType camel_mime_part_encoding_from_string (const gchar *string) { - printf ("*************** encoding string : _%s_\n", string); if (strcmp (string, "7bit") == 0) return CAMEL_MIME_PART_ENCODING_7BIT; else if (strcmp (string, "8bit") == 0) diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c index c44eaacb09..d5c8f383aa 100644 --- a/camel/camel-multipart.c +++ b/camel/camel-multipart.c @@ -35,30 +35,30 @@ #include "camel-multipart.h" -static void _add_part (CamelMultipart *multipart, - CamelMimeBodyPart *part); -static void _add_part_at (CamelMultipart *multipart, - CamelMimeBodyPart *part, - guint index); -static void _remove_part (CamelMultipart *multipart, - CamelMimeBodyPart *part); -static CamelMimeBodyPart * _remove_part_at (CamelMultipart *multipart, - guint index); -static CamelMimeBodyPart * _get_part (CamelMultipart *multipart, - guint index); -static guint _get_number (CamelMultipart *multipart); -static void _set_parent (CamelMultipart *multipart, - CamelMimePart *parent); -static CamelMimePart * _get_parent (CamelMultipart *multipart); -static void _set_boundary (CamelMultipart *multipart, - gchar *boundary); -static const gchar * _get_boundary (CamelMultipart *multipart); -static void _write_to_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static void _set_input_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); - -static void _finalize (GtkObject *object); +static void my_add_part (CamelMultipart *multipart, + CamelMimeBodyPart *part); +static void my_add_part_at (CamelMultipart *multipart, + CamelMimeBodyPart *part, + guint index); +static void my_remove_part (CamelMultipart *multipart, + CamelMimeBodyPart *part); +static CamelMimeBodyPart * my_remove_part_at (CamelMultipart *multipart, + guint index); +static CamelMimeBodyPart * my_get_part (CamelMultipart *multipart, + guint index); +static guint my_get_number (CamelMultipart *multipart); +static void my_set_parent (CamelMultipart *multipart, + CamelMimePart *parent); +static CamelMimePart * my_get_parent (CamelMultipart *multipart); +static void my_set_boundary (CamelMultipart *multipart, + gchar *boundary); +static const gchar * my_get_boundary (CamelMultipart *multipart); +static void my_write_to_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static void my_set_input_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); + +static void my_finalize (GtkObject *object); static CamelDataWrapperClass *parent_class=NULL; @@ -76,26 +76,26 @@ camel_multipart_class_init (CamelMultipartClass *camel_multipart_class) { CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_multipart_class); GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (camel_multipart_class); - + parent_class = gtk_type_class (camel_data_wrapper_get_type ()); - + /* virtual method definition */ - camel_multipart_class->add_part = _add_part; - camel_multipart_class->add_part_at = _add_part_at; - camel_multipart_class->remove_part = _remove_part; - camel_multipart_class->remove_part_at = _remove_part_at; - camel_multipart_class->get_part = _get_part; - camel_multipart_class->get_number = _get_number; - camel_multipart_class->set_parent = _set_parent; - camel_multipart_class->get_parent = _get_parent; - camel_multipart_class->set_boundary = _set_boundary; - camel_multipart_class->get_boundary = _get_boundary; - + camel_multipart_class->add_part = my_add_part; + camel_multipart_class->add_part_at = my_add_part_at; + camel_multipart_class->remove_part = my_remove_part; + camel_multipart_class->remove_part_at = my_remove_part_at; + camel_multipart_class->get_part = my_get_part; + camel_multipart_class->get_number = my_get_number; + camel_multipart_class->set_parent = my_set_parent; + camel_multipart_class->get_parent = my_get_parent; + camel_multipart_class->set_boundary = my_set_boundary; + camel_multipart_class->get_boundary = my_get_boundary; + /* virtual method overload */ - camel_data_wrapper_class->write_to_stream = _write_to_stream; - camel_data_wrapper_class->set_input_stream = _set_input_stream; - - gtk_object_class->finalize = _finalize; + camel_data_wrapper_class->write_to_stream = my_write_to_stream; + camel_data_wrapper_class->set_input_stream = my_set_input_stream; + + gtk_object_class->finalize = my_finalize; } static void @@ -137,7 +137,7 @@ camel_multipart_get_type (void) } static void -_unref_part (gpointer data, gpointer user_data) +my_unref_part (gpointer data, gpointer user_data) { GtkObject *body_part = GTK_OBJECT (data); @@ -145,20 +145,20 @@ _unref_part (gpointer data, gpointer user_data) } static void -_finalize (GtkObject *object) +my_finalize (GtkObject *object) { CamelMultipart *multipart = CAMEL_MULTIPART (object); - + CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::finalize\n"); - + if (multipart->parent) gtk_object_unref (GTK_OBJECT (multipart->parent)); - - g_list_foreach (multipart->parts, _unref_part, NULL); + + g_list_foreach (multipart->parts, my_unref_part, NULL); if (multipart->boundary) g_free (multipart->boundary); if (multipart->preface) g_free (multipart->preface); if (multipart->postface) g_free (multipart->postface); - + GTK_OBJECT_CLASS (parent_class)->finalize (object); CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::finalize\n"); } @@ -174,15 +174,15 @@ camel_multipart_new (void) multipart = (CamelMultipart *)gtk_type_new (CAMEL_MULTIPART_TYPE); multipart->preface = NULL; multipart->postface = NULL; - - + + CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving new()\n"); return multipart; } static void -_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part) +my_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part) { multipart->parts = g_list_append (multipart->parts, part); if (part) gtk_object_ref (GTK_OBJECT (part)); @@ -196,7 +196,7 @@ camel_multipart_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part) static void -_add_part_at (CamelMultipart *multipart, CamelMimeBodyPart *part, guint index) +my_add_part_at (CamelMultipart *multipart, CamelMimeBodyPart *part, guint index) { multipart->parts = g_list_insert (multipart->parts, part, index); if (part) gtk_object_ref (GTK_OBJECT (part)); @@ -209,7 +209,7 @@ camel_multipart_add_part_at (CamelMultipart *multipart, CamelMimeBodyPart *part, } static void -_remove_part (CamelMultipart *multipart, CamelMimeBodyPart *part) +my_remove_part (CamelMultipart *multipart, CamelMimeBodyPart *part) { if (!multipart->parts) { CAMEL_LOG_FULL_DEBUG ("CamelMultipart::remove_part part list id void\n"); @@ -227,20 +227,20 @@ camel_multipart_remove_part (CamelMultipart *multipart, CamelMimeBodyPart *part) static CamelMimeBodyPart * -_remove_part_at (CamelMultipart *multipart, guint index) +my_remove_part_at (CamelMultipart *multipart, guint index) { GList *parts_list; GList *part_to_remove; CamelMimeBodyPart *removed_body_part; - + CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Entering remove_part_at\n"); CAMEL_LOG_TRACE ("CamelMultipart::remove_part_at : Removing part number %d\n", index); - + if (!(multipart->parts)) { CAMEL_LOG_FULL_DEBUG ("CamelMultipart::remove_part_at part list is void \n"); return NULL; } - + parts_list = multipart->parts; part_to_remove = g_list_nth (parts_list, index); if (!part_to_remove) { @@ -250,7 +250,7 @@ _remove_part_at (CamelMultipart *multipart, guint index) return NULL; } removed_body_part = CAMEL_MIME_BODY_PART (part_to_remove->data); - + multipart->parts = g_list_remove_link (parts_list, part_to_remove); if (part_to_remove->data) gtk_object_unref (GTK_OBJECT (part_to_remove->data)); g_list_free_1 (part_to_remove); @@ -268,7 +268,7 @@ camel_multipart_remove_part_at (CamelMultipart *multipart, guint index) static CamelMimeBodyPart * -_get_part (CamelMultipart *multipart, guint index) +my_get_part (CamelMultipart *multipart, guint index) { GList *part; if (!(multipart->parts)) { @@ -292,7 +292,7 @@ camel_multipart_get_part (CamelMultipart *multipart, guint index) static guint -_get_number (CamelMultipart *multipart) +my_get_number (CamelMultipart *multipart) { return g_list_length (multipart->parts); } @@ -305,7 +305,7 @@ camel_multipart_get_number (CamelMultipart *multipart) static void -_set_parent (CamelMultipart *multipart, CamelMimePart *parent) +my_set_parent (CamelMultipart *multipart, CamelMimePart *parent) { multipart->parent = parent; if (parent) gtk_object_ref (GTK_OBJECT (parent)); @@ -319,7 +319,7 @@ camel_multipart_set_parent (CamelMultipart *multipart, CamelMimePart *parent) static CamelMimePart * -_get_parent (CamelMultipart *multipart) +my_get_parent (CamelMultipart *multipart) { return multipart->parent; } @@ -336,7 +336,7 @@ camel_multipart_get_parent (CamelMultipart *multipart) static void -_set_boundary (CamelMultipart *multipart, gchar *boundary) +my_set_boundary (CamelMultipart *multipart, gchar *boundary) { gmime_content_field_set_parameter (CAMEL_DATA_WRAPPER (multipart)->mime_type, "boundary", boundary); } @@ -349,7 +349,7 @@ camel_multipart_set_boundary (CamelMultipart *multipart, gchar *boundary) static const gchar * -_get_boundary (CamelMultipart *multipart) +my_get_boundary (CamelMultipart *multipart) { const gchar *boundary; CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_get_boundary\n"); @@ -371,7 +371,7 @@ camel_multipart_get_boundary (CamelMultipart *multipart) } -struct _print_part_user_data { +struct my_print_part_user_data { CamelStream *stream; const gchar *boundary; }; @@ -379,37 +379,60 @@ struct _print_part_user_data { static void -_print_part (gpointer data, gpointer user_data) +my_print_part (gpointer data, gpointer user_data) { CamelMimeBodyPart *body_part = CAMEL_MIME_BODY_PART (data); - struct _print_part_user_data *ud = (struct _print_part_user_data *)user_data; + struct my_print_part_user_data *ud = (struct my_print_part_user_data *)user_data; if (ud->boundary) camel_stream_write_strings (ud->stream, "\n--", ud->boundary, "\n", NULL); else camel_stream_write_strings (ud->stream, "\n--\n", NULL); camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (body_part), ud->stream); - + } - + static void -_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper); - struct _print_part_user_data ud; + struct my_print_part_user_data ud; const gchar *boundary; - + CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_write_to_stream entering\n"); + + /* get the bundary text */ boundary = camel_multipart_get_boundary (multipart); CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_write_to_stream, boundary = %s\n", boundary); + + /* we cannot write a multipart without a boundary string */ g_return_if_fail (boundary); + + /* + * write the preface text (usually something like + * "This is a mime message, if you see this, then + * your mail client probably doesn't support ...." + */ + if (multipart->preface) camel_stream_write_strings (stream, multipart->preface, NULL); + + /* + * Now, write all the parts, separated by the boundary + * delimiter + */ ud.boundary = boundary; ud.stream = stream; - if (multipart->preface) camel_stream_write_strings (stream, multipart->preface, NULL); - g_list_foreach (multipart->parts, _print_part, (gpointer)&ud); + if (boundary && (boundary[0] == '\0')) + g_warning ("Multipart boundary is zero length\n"); + g_list_foreach (multipart->parts, my_print_part, (gpointer)&ud); + + /* write the terminating boudary delimiter */ camel_stream_write_strings (stream, "\n--", boundary, "--\n", NULL); + + /* and finally the postface */ if (multipart->postface) camel_stream_write_strings (stream, multipart->postface, NULL); + + CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::_write_to_stream leaving \n"); } @@ -424,7 +447,7 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) /** - * _localize_part: localize one part in a multipart environement. + * my_localize_part: localize one part in a multipart environement. * @stream: the stream to read the lines from. * @normal_boundary: end of part bundary. * @end_boundary: end of multipart boundary. @@ -439,28 +462,28 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) **/ static gboolean -_localize_part (CamelStream *stream, - gchar *normal_boundary, - gchar *end_boundary, - guint32 *end_position) +my_localize_part (CamelStream *stream, + gchar *normal_boundary, + gchar *end_boundary, + guint32 *end_position) { gchar *new_line = NULL; gboolean end_of_part = FALSE; gboolean last_part = FALSE; guint32 last_position; - + /* Note for future enhancements */ /* RFC 2046 precises that when parsing the content of a multipart * element, the program should not think it will find the last boundary, * and in particular, the message could have been damaged during * transport, the parsing should still be OK */ - CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Entering _localize_part\n"); - + CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Entering my_localize_part\n"); + g_assert (CAMEL_IS_SEEKABLE_STREAM (stream)); - + last_position = camel_seekable_stream_get_current_position (CAMEL_SEEKABLE_STREAM (stream)); new_line = gmime_read_line_from_stream (stream); - + while (new_line && !end_of_part && !last_part) { end_of_part = (strcmp (new_line, normal_boundary) == 0); last_part = (strcmp (new_line, end_boundary) == 0); @@ -470,17 +493,17 @@ _localize_part (CamelStream *stream, last_position = camel_seekable_stream_get_current_position (CAMEL_SEEKABLE_STREAM (stream)); - + new_line = gmime_read_line_from_stream (stream); } } if (new_line) g_free (new_line); else last_part = TRUE; - + *end_position = last_position; - - CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving _localize_part\n"); + + CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving my_localize_part\n"); return (last_part); } @@ -488,7 +511,7 @@ _localize_part (CamelStream *stream, static void -_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper); CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream); @@ -501,40 +524,40 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) CamelSeekableSubstream *body_part_input_stream; guint32 saved_stream_pos; - + CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_set_input_stream\n"); - + /* call parent class implementation */ parent_class->set_input_stream (data_wrapper, stream); - + boundary = camel_multipart_get_boundary (multipart); g_return_if_fail (boundary); real_boundary_line = g_strdup_printf ("--%s", boundary); end_boundary_line = g_strdup_printf ("--%s--", boundary); - + /* read the prefix if any */ - end_of_multipart = _localize_part (stream, - real_boundary_line, - end_boundary_line, - &part_end); + end_of_multipart = my_localize_part (stream, + real_boundary_line, + end_boundary_line, + &part_end); if (multipart->preface) g_free (multipart->preface); - + /* if ( (new_part->str)[0] != '\0') multipart->preface = g_strdup (new_part->str); */ /* read all the real parts */ while (!end_of_multipart) { /* determine the position of the begining of the part */ part_begining = camel_seekable_stream_get_current_position (seekable_stream); - + CAMEL_LOG_FULL_DEBUG ("CamelMultipart::set_input_stream, detected a new part\n"); body_part = camel_mime_body_part_new (); - end_of_multipart = _localize_part (stream, - real_boundary_line, - end_boundary_line, - &part_end); + end_of_multipart = my_localize_part (stream, + real_boundary_line, + end_boundary_line, + &part_end); body_part_input_stream = camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_stream, part_begining, @@ -542,33 +565,34 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) CAMEL_LOG_FULL_DEBUG ("CamelMultipart::set_input_stream, use a substream,\n" "\tbegining = %d\n" "\tend = %d\n",part_begining, part_end); - + /* the seekable substream may change the position of the stream so we must save it before calling set_input_stream */ saved_stream_pos = camel_seekable_stream_get_current_position (seekable_stream); - + camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (body_part), CAMEL_STREAM (body_part_input_stream)); CAMEL_LOG_FULL_DEBUG ("CamelMultipart::set_input_stream," "new body part has input stream : %p\n", body_part_input_stream); - + /* restore the stream position */ camel_seekable_stream_seek (seekable_stream, saved_stream_pos, CAMEL_STREAM_SET); - + /* add the body part to the multipart object */ camel_multipart_add_part (multipart, body_part); } - + /* g_string_assign (new_part, ""); */ - /* _localize_part (new_part, stream, real_boundary_line, end_boundary_line); */ - + /* my_localize_part (new_part, stream, real_boundary_line, end_boundary_line); */ + if (multipart->postface) g_free (multipart->postface); /* if ( (new_part->str)[0] != '\0') multipart->postface = g_strdup (new_part->str); */ - + /* g_string_free (new_part, TRUE); */ - + g_free (real_boundary_line); g_free (end_boundary_line); CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::_set_input_stream\n"); } + diff --git a/camel/camel-simple-data-wrapper.c b/camel/camel-simple-data-wrapper.c index f4b7afd5f9..a1822e8bcf 100644 --- a/camel/camel-simple-data-wrapper.c +++ b/camel/camel-simple-data-wrapper.c @@ -35,13 +35,12 @@ static CamelDataWrapperClass *parent_class=NULL; /* Returns the class for a CamelDataWrapper */ #define CSDW_CLASS(so) CAMEL_SIMPLE_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass) -static void _construct_from_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static void _write_to_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); -static void _finalize (GtkObject *object); -static CamelStream * _get_stream (CamelDataWrapper *data_wrapper); -static CamelStream * _get_output_stream (CamelDataWrapper *data_wrapper); +static void my_construct_from_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static void my_write_to_stream (CamelDataWrapper *data_wrapper, + CamelStream *stream); +static void my_finalize (GtkObject *object); +static CamelStream * my_get_output_stream (CamelDataWrapper *data_wrapper); @@ -55,22 +54,22 @@ camel_simple_data_wrapper_class_init (CamelSimpleDataWrapperClass *camel_simple_ /* virtual method definition */ /* virtual method overload */ - camel_data_wrapper_class->write_to_stream = _write_to_stream; - camel_data_wrapper_class->construct_from_stream = _construct_from_stream; - camel_data_wrapper_class->get_output_stream = _get_output_stream; + camel_data_wrapper_class->write_to_stream = my_write_to_stream; + camel_data_wrapper_class->construct_from_stream = my_construct_from_stream; + camel_data_wrapper_class->get_output_stream = my_get_output_stream; - camel_data_wrapper_class->get_stream = _get_stream; - - gtk_object_class->finalize = _finalize; + gtk_object_class->finalize = my_finalize; } static void camel_simple_data_wrapper_init (CamelSimpleDataWrapper *wrapper) { - wrapper->stream = NULL; + wrapper->byte_array = NULL; + wrapper->has_byte_array_stream = FALSE; } + GtkType camel_simple_data_wrapper_get_type (void) { @@ -89,7 +88,8 @@ camel_simple_data_wrapper_get_type (void) (GtkClassInitFunc) NULL, }; - camel_simple_data_wrapper_type = gtk_type_unique (camel_data_wrapper_get_type (), &camel_simple_data_wrapper_info); + camel_simple_data_wrapper_type = gtk_type_unique (camel_data_wrapper_get_type (), + &camel_simple_data_wrapper_info); } return camel_simple_data_wrapper_type; @@ -97,7 +97,7 @@ camel_simple_data_wrapper_get_type (void) static void -_finalize (GtkObject *object) +my_finalize (GtkObject *object) { CamelSimpleDataWrapper *simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (object); @@ -130,11 +130,11 @@ camel_simple_data_wrapper_new (void) static void -_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelSimpleDataWrapper *simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper); GByteArray *array; - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Entering _write_to_stream\n"); + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Entering my_write_to_stream\n"); g_assert (data_wrapper); g_assert (stream); @@ -143,28 +143,28 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) if (array->len) camel_stream_write (stream, (gchar *)array->data, array->len); - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Leaving _write_to_stream\n"); + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Leaving my_write_to_stream\n"); } -#define _CMSDW_TMP_BUF_SIZE 100 +#define my_CMSDW_TMP_BUF_SIZE 100 static void -_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +my_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelSimpleDataWrapper *simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper); gint nb_bytes_read; static gchar *tmp_buf; GByteArray *array; - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Entering _construct_from_stream\n"); + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Entering my_construct_from_stream\n"); g_assert (data_wrapper); g_assert (stream); if (!tmp_buf) { CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::construct_from_stream allocating new temp buffer " - "with %d bytes\n", _CMSDW_TMP_BUF_SIZE); - tmp_buf = g_new (gchar, _CMSDW_TMP_BUF_SIZE); + "with %d bytes\n", my_CMSDW_TMP_BUF_SIZE); + tmp_buf = g_new (gchar, my_CMSDW_TMP_BUF_SIZE); } array = simple_data_wrapper->byte_array; @@ -176,14 +176,14 @@ _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) array = g_byte_array_new (); CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::construct_from_stream new byte array address:%p\n", array); simple_data_wrapper->byte_array = array; - nb_bytes_read = camel_stream_read (stream, tmp_buf, _CMSDW_TMP_BUF_SIZE); + nb_bytes_read = camel_stream_read (stream, tmp_buf, my_CMSDW_TMP_BUF_SIZE); while (nb_bytes_read>0) { CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::construct_from_stream read %d bytes from stream\n", nb_bytes_read); if (nb_bytes_read>0) g_byte_array_append (array, tmp_buf, nb_bytes_read); - nb_bytes_read = camel_stream_read (stream, tmp_buf, _CMSDW_TMP_BUF_SIZE); + nb_bytes_read = camel_stream_read (stream, tmp_buf, my_CMSDW_TMP_BUF_SIZE); }; - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Leaving _construct_from_stream\n"); + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper:: Leaving my_construct_from_stream\n"); } @@ -219,29 +219,27 @@ camel_simple_data_wrapper_set_text (CamelSimpleDataWrapper *simple_data_wrapper, + + static CamelStream * -_get_stream (CamelDataWrapper *data_wrapper) +my_get_output_stream (CamelDataWrapper *data_wrapper) { CamelSimpleDataWrapper *simple_data_wrapper; + CamelStream *output_stream = NULL; - simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper); - if (simple_data_wrapper->stream == NULL) { - CamelStream *s; - - s = camel_simple_data_wrapper_stream_new (simple_data_wrapper); - simple_data_wrapper->stream = s; - } - - return simple_data_wrapper->stream; -} + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::get_output_stream leaving\n"); -static CamelStream * -_get_output_stream (CamelDataWrapper *data_wrapper) -{ + g_assert (data_wrapper); + simple_data_wrapper = CAMEL_SIMPLE_DATA_WRAPPER (data_wrapper); - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::get_output_stream leaving\n"); - return camel_data_wrapper_get_input_stream (data_wrapper); - CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::get_output_stream leaving\n"); + if (simple_data_wrapper->byte_array && !(simple_data_wrapper->has_byte_array_stream)) { + output_stream = camel_simple_data_wrapper_stream_new (simple_data_wrapper); + camel_data_wrapper_set_output_stream (data_wrapper, output_stream); + } + CAMEL_LOG_FULL_DEBUG ("CamelSimpleDataWrapper::get_output_stream leaving\n"); + + return parent_class->get_output_stream (data_wrapper); + } diff --git a/camel/camel-simple-data-wrapper.h b/camel/camel-simple-data-wrapper.h index fe89af5545..50dfa84f64 100644 --- a/camel/camel-simple-data-wrapper.h +++ b/camel/camel-simple-data-wrapper.h @@ -50,7 +50,7 @@ struct _CamelSimpleDataWrapper CamelDataWrapper parent_object; GByteArray *byte_array; - CamelStream *stream; + gboolean has_byte_array_stream; }; diff --git a/camel/camel-stream-b64.c b/camel/camel-stream-b64.c index df4f755fac..eb99f40058 100644 --- a/camel/camel-stream-b64.c +++ b/camel/camel-stream-b64.c @@ -356,7 +356,8 @@ my_read_encode (CamelStream *stream, * read to write in the stream */ if (status->state == 3) { - buffer [j++] = status->keep; + buffer [j++] = six_bits_to_char [status->keep]; + status->state = 0; status->keep = 0; status->line_length++; break; @@ -418,7 +419,7 @@ my_read_encode (CamelStream *stream, * we are at the end of the input stream * we must pad the output with '='. */ - + printf ("%d\n", status->end_state); while ((j<n) && (status->end_state != 6)) { if (status->end_state == 5) { @@ -465,7 +466,6 @@ my_read_encode (CamelStream *stream, } - status->end_state++; break; @@ -570,8 +570,9 @@ camel_stream_b64_write_to_stream (CamelStreamB64 *stream_b64, while (!camel_stream_eos (CAMEL_STREAM (stream_b64))) { nb_read = camel_stream_read (CAMEL_STREAM (stream_b64), tmp_buf, 4096); nb_written = 0; + while (nb_written < nb_read) - nb_written += camel_stream_write (output_stream, tmp_buf, nb_read); + nb_written += camel_stream_write (output_stream, tmp_buf + nb_written, nb_read - nb_written); } } diff --git a/camel/camel-stream-fs.c b/camel/camel-stream-fs.c index f2aab64910..4455c40b2b 100644 --- a/camel/camel-stream-fs.c +++ b/camel/camel-stream-fs.c @@ -355,6 +355,7 @@ _read (CamelStream *stream, gchar *buffer, gint n) do { v = read ( (CAMEL_STREAM_FS (stream))->fd, buffer, nb_to_read); } while (v == -1 && errno == EINTR); + if (v<0) CAMEL_LOG_FULL_DEBUG ("CamelStreamFs::read v=%d\n", v); else @@ -384,18 +385,20 @@ _write (CamelStream *stream, const gchar *buffer, gint n) CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream); int v; gint nb_to_write; + gint nb_bytes_written = 0; + if (n <= 0) + return 0; + g_assert (stream); g_assert (stream_fs->fd); CAMEL_LOG_FULL_DEBUG ( "CamelStreamFs:: entering write. n=%d\n", n); - if (stream_fs->sup_bound != -1) - nb_to_write = MIN (stream_fs->sup_bound - CAMEL_SEEKABLE_STREAM (stream)->cur_pos, n); - else - nb_to_write = n; - + /* we do not take the end bounds into account as it does not + really make any sense in the case of a write operation */ do { - v = write ( stream_fs->fd, buffer, nb_to_write); + v = write ( stream_fs->fd, buffer, n); + if (v>0) nb_bytes_written += v; } while (v == -1 && errno == EINTR); #if HARD_LOG_LEVEL >= FULL_DEBUG @@ -405,10 +408,10 @@ _write (CamelStream *stream, const gchar *buffer, gint n) } #endif - if (v>0) - CAMEL_SEEKABLE_STREAM (stream)->cur_pos += v; + if (nb_bytes_written>0) + CAMEL_SEEKABLE_STREAM (stream)->cur_pos += nb_bytes_written; - return v; + return nb_bytes_written; } diff --git a/tests/test1.c b/tests/test1.c index 048b36e1ec..d967bb3566 100644 --- a/tests/test1.c +++ b/tests/test1.c @@ -78,7 +78,9 @@ main (int argc, char**argv) if (attachment_stream == NULL) { attachment_part = NULL; } else { - CamelDataWrapper *stream_wrapper; + CamelDataWrapper *attachment_wrapper; + + /*CamelDataWrapper *stream_wrapper; stream_wrapper = camel_stream_data_wrapper_new (attachment_stream); @@ -90,7 +92,21 @@ main (int argc, char**argv) stream_wrapper); camel_multipart_add_part (multipart, attachment_part); - gtk_object_unref (GTK_OBJECT (stream_wrapper)); + gtk_object_unref (GTK_OBJECT (stream_wrapper));*/ + + attachment_wrapper = CAMEL_DATA_WRAPPER (camel_simple_data_wrapper_new ()); + camel_data_wrapper_set_input_stream (attachment_wrapper, + attachment_stream); + + attachment_part = camel_mime_body_part_new (); + camel_mime_part_set_encoding (CAMEL_MIME_PART (attachment_part), + CAMEL_MIME_PART_ENCODING_BASE64); + camel_medium_set_content_object (CAMEL_MEDIUM (attachment_part), + attachment_wrapper); + camel_multipart_add_part (multipart, attachment_part); + + + } camel_medium_set_content_object (CAMEL_MEDIUM (message), CAMEL_DATA_WRAPPER (multipart)); |