From 08752e1b538c47f74714199eed76e9cda61c256f Mon Sep 17 00:00:00 2001 From: bertrand Date: Tue, 17 Aug 1999 17:44:00 +0000 Subject: return the number of bytes read. How can this have ever worked ? 1999-08-17 bertrand * camel/camel-stream.c (camel_stream_read): return the number of bytes read. How can this have ever worked ? (camel_stream_flush): don't return anything. * camel/gmime-utils.c (get_header_table_from_stream): mem leak fixed. + various other mem leaks. svn path=/trunk/; revision=1120 --- ChangeLog | 10 ++++++++++ camel/camel-multipart.c | 13 ++++++++----- camel/camel-simple-data-wrapper.c | 2 +- camel/camel-stream-fs.c | 7 +++++-- camel/camel-stream.c | 4 ++-- camel/gmime-content-field.c | 4 +++- camel/gmime-utils.c | 23 ++++++++++++++++------- camel/string-utils.c | 4 ++-- tests/test2.c | 4 ++++ 9 files changed, 51 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 328f598aad..9d7130ce9a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +1999-08-17 bertrand + + * camel/camel-stream.c (camel_stream_read): + return the number of bytes read. + How can this have ever worked ? + (camel_stream_flush): don't return anything. + + * camel/gmime-utils.c (get_header_table_from_stream): + mem leak fixed. + 1999-08-16 bertrand * tests/ui-tests/store_listing.c: diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c index 17f79cdd97..205e33c54b 100644 --- a/camel/camel-multipart.c +++ b/camel/camel-multipart.c @@ -220,7 +220,7 @@ _remove_part_at (CamelMultipart *multipart, guint index) if (!(multipart->parts)) { CAMEL_LOG_FULL_DEBUG ("CamelMultipart::remove_part_at part list is void \n"); - return; + return NULL; } parts_list = multipart->parts; @@ -337,7 +337,7 @@ _get_boundary (CamelMultipart *multipart) CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_get_boundary\n"); if (!CAMEL_DATA_WRAPPER (multipart)->mime_type) { CAMEL_LOG_WARNING ("CamelMultipart::_get_boundary CAMEL_DATA_WRAPPER (multipart)->mime_type is NULL\n"); - return; + return NULL; } boundary = gmime_content_field_get_parameter (CAMEL_DATA_WRAPPER (multipart)->mime_type, "boundary"); CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::_get_boundary\n"); @@ -415,7 +415,7 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) static gboolean _read_part (CamelStream *new_part_stream, CamelStream *stream, gchar *normal_boundary, gchar *end_boundary) { - gchar *new_line; + gchar *new_line = NULL; gboolean end_of_part = FALSE; gboolean last_part = FALSE; gboolean first_line = TRUE; @@ -436,10 +436,12 @@ _read_part (CamelStream *new_part_stream, CamelStream *stream, gchar *normal_bou first_line = FALSE; camel_stream_write_string (new_part_stream, new_line); } else camel_stream_write_strings (new_part_stream, "\n", new_line, NULL); - + g_free (new_line); new_line = gmime_read_line_from_stream (stream); } } + if (new_line) g_free (new_line); + CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving _read_part\n"); return (last_part || (new_line == NULL)); } @@ -466,7 +468,8 @@ _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) /* read the prefix if any */ new_part_stream = camel_stream_mem_new (CAMEL_STREAM_MEM_RW); end_of_multipart = _read_part (new_part_stream, stream, real_boundary_line, end_boundary_line); - gtk_object_destroy (GTK_OBJECT (new_part_stream)); + CAMEL_LOG_FULL_DEBUG ("CamelMultipart::construct_from_stream freeing new_part_stream:%p\n", new_part_stream); + gtk_object_unref (GTK_OBJECT (new_part_stream)); if (multipart->preface) g_free (multipart->preface); //if ( (new_part->str)[0] != '\0') multipart->preface = g_strdup (new_part->str); diff --git a/camel/camel-simple-data-wrapper.c b/camel/camel-simple-data-wrapper.c index 99bd0b2075..cc7fc6bba7 100644 --- a/camel/camel-simple-data-wrapper.c +++ b/camel/camel-simple-data-wrapper.c @@ -159,7 +159,7 @@ _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) g_byte_array_free (array, FALSE); } - array = g_byte_array_new(); + 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); diff --git a/camel/camel-stream-fs.c b/camel/camel-stream-fs.c index 340a87606c..679ee83035 100644 --- a/camel/camel-stream-fs.c +++ b/camel/camel-stream-fs.c @@ -66,7 +66,7 @@ camel_stream_fs_class_init (CamelStreamFsClass *camel_stream_fs_class) camel_stream_class->seek = _seek; gtk_object_class->finalize = _finalize; - gtk_object_class->finalize = _destroy; + gtk_object_class->destroy = _destroy; } @@ -111,6 +111,7 @@ _destroy (GtkObject *object) CAMEL_LOG_FULL_DEBUG ( " Full error text is : %s\n", strerror(errno)); } GTK_OBJECT_CLASS (parent_class)->destroy (object); + g_free (object); CAMEL_LOG_FULL_DEBUG ("Leaving CamelStreamFs::destroy\n"); } @@ -194,10 +195,12 @@ camel_stream_fs_new_with_fd (int fd) static gint _read (CamelStream *stream, gchar *buffer, gint n) { - int v; + gint v; do { v = read ( (CAMEL_STREAM_FS (stream))->fd, buffer, n); } while (v == -1 && errno == EINTR); + if (v<0) + CAMEL_LOG_FULL_DEBUG ("CamelStreamFs::read v=%d\n", v); return v; } diff --git a/camel/camel-stream.c b/camel/camel-stream.c index b63a64ddb7..18ff5db8f5 100644 --- a/camel/camel-stream.c +++ b/camel/camel-stream.c @@ -104,7 +104,7 @@ camel_stream_get_type (void) gint camel_stream_read (CamelStream *stream, gchar *buffer, gint n) { - CS_CLASS (stream)->read (stream, buffer, n); + return CS_CLASS (stream)->read (stream, buffer, n); } /** @@ -133,7 +133,7 @@ camel_stream_write (CamelStream *stream, const gchar *buffer, gint n) void camel_stream_flush (CamelStream *stream) { - return CS_CLASS (stream)->flush (stream); + CS_CLASS (stream)->flush (stream); } /** diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c index 04b07b7626..a499ec6a9e 100644 --- a/camel/gmime-content-field.c +++ b/camel/gmime-content-field.c @@ -126,7 +126,7 @@ gmime_content_field_unref (GMimeContentField *content_field) * or valid parameters name depend on the content type object. For example, * gmime_content_field_set_parameter (cf, "charset", "us-ascii"); * will make sense for a "text/plain" content field but not for a - * "image/gif". This routine does not check parameter validuty. + * "image/gif". This routine does not check parameter validity. **/ void gmime_content_field_set_parameter (GMimeContentField *content_field, const gchar *attribute, const gchar *value) @@ -356,6 +356,8 @@ gmime_content_field_construct_from_string (GMimeContentField *content_field, con CAMEL_LOG_TRACE ( "GMimeContentField::construct_from_string, Found mime parameter \"%s\"=\"%s\"\n", param_name, param_value); string_trim (param_value, " \t", STRING_TRIM_STRIP_TRAILING | STRING_TRIM_STRIP_LEADING); gmime_content_field_set_parameter (content_field, param_name, param_value); + g_free (param_name); + g_free (param_value); i++; first = i; } diff --git a/camel/gmime-utils.c b/camel/gmime-utils.c index 24986d48a3..c9c17b62bd 100644 --- a/camel/gmime-utils.c +++ b/camel/gmime-utils.c @@ -113,6 +113,8 @@ _store_header_pair_from_string (GHashTable *header_table, gchar *header_line) { gchar dich_result; gchar *header_name, *header_value; + gboolean key_exists; + gchar *old_header_name, *old_header_value; CAMEL_LOG_FULL_DEBUG ( "_store_header_pair_from_string:: Entering\n"); g_assert (header_table); @@ -121,15 +123,23 @@ _store_header_pair_from_string (GHashTable *header_table, gchar *header_line) dich_result = string_dichotomy ( header_line, ':', &header_name, &header_value, STRING_DICHOTOMY_NONE); - if (dich_result != 'o') + if (dich_result != 'o') { CAMEL_LOG_WARNING ( "** WARNING **\n" "store_header_pair_from_string : dichotomy result is '%c'\n" "header line is :\n--\n%s\n--\n" "** \n", dich_result, header_line); - else { + if (header_name) + g_free (header_name); + if (header_value) + g_free (header_value); + + } else { string_trim (header_value, " \t", STRING_TRIM_STRIP_LEADING | STRING_TRIM_STRIP_TRAILING); + key_exists = g_hash_table_lookup_extended (header_table, header_name, &old_header_name, &old_header_name); + if (key_exists) + printf ("-------- Key %s already exists /n", header_name); g_hash_table_insert (header_table, header_name, header_value); } } @@ -186,9 +196,8 @@ get_header_table_from_stream (CamelStream *stream) } default: - if (!crlf) header_line = g_string_append_c (header_line, next_char); - -else end_of_header_line = TRUE; + if (!crlf) header_line = g_string_append_c (header_line, next_char); + else end_of_header_line = TRUE; } } else { end_of_file=TRUE; @@ -201,8 +210,8 @@ else end_of_header_line = TRUE; } while ( !end_of_header_line ); if ( strlen(header_line->str) ) { - str_header_line = g_strdup (header_line->str); - _store_header_pair_from_string (header_table, str_header_line); + /* str_header_line = g_strdup (header_line->str); */ + _store_header_pair_from_string (header_table, header_line->str); } g_string_free (header_line, FALSE); diff --git a/camel/string-utils.c b/camel/string-utils.c index b0d17aec5c..b1a6a5fe8a 100644 --- a/camel/string-utils.c +++ b/camel/string-utils.c @@ -136,11 +136,11 @@ string_dichotomy (const gchar *string, gchar sep, gchar **prefix, gchar **suffix } CAMEL_LOG_FULL_DEBUG ("string_dichotomy: separator found at :%d\n", sep_pos); if (prefix) { /* return the prefix */ - *prefix = g_strndup(string+first,sep_pos-first); + *prefix = g_strndup (string+first,sep_pos-first); CAMEL_LOG_FULL_DEBUG ( "string_dichotomy:: prefix:\"%s\"\n", *prefix); } if (suffix) { /* return the suffix */ - *suffix = g_strndup(string+sep_pos+1, last-sep_pos); + *suffix = g_strndup (string+sep_pos+1, last-sep_pos); CAMEL_LOG_FULL_DEBUG ( "string_dichotomy:: suffix:\"%s\"\n", *suffix); } diff --git a/tests/test2.c b/tests/test2.c index c120d558d6..5b4e319c5d 100644 --- a/tests/test2.c +++ b/tests/test2.c @@ -32,10 +32,14 @@ main (int argc, char**argv) camel_data_wrapper_construct_from_stream ( CAMEL_DATA_WRAPPER (message), input_stream); camel_stream_close (input_stream); + gtk_object_unref (GTK_OBJECT (input_stream)); output_stream = camel_stream_fs_new_with_name ("mail2.test", CAMEL_STREAM_FS_WRITE); camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream); camel_stream_close (output_stream); + gtk_object_unref (GTK_OBJECT (output_stream)); + + gtk_object_unref (GTK_OBJECT (message)); return 0; -- cgit v1.2.3