From 5deed2f193e7ab91f159f1a764b78578861044cd Mon Sep 17 00:00:00 2001 From: bertrand Date: Tue, 22 Jun 1999 14:19:24 +0000 Subject: new function, returns "type/subtype" mime type string. * camel/gmime-content-field.c (gmime_content_field_get_mime_type): new function, returns "type/subtype" mime type string. (gmime_content_field_construct_from_string): new function, construbt a content_field object form a string. be used to set the mime_type from a string. * camel/camel-mime-part.c (_set_content_type): (camel_mime_part_set_content_type): (_get_content_type): (_get_content_type): new methods. 1999-06-21 bertrand * camel/gmime-utils.c (get_header_table_from_stream): replace CR/LF+'\t' with ' ' * camel/camel-mime-message.c (_set_recipient_list_from_string): trim \t when splitting * camel/gmime-utils.c (get_header_table_from_file): corrected bug in scanning tabulations ('t' -> '\t') * tests/test2.c (main): read mail.test instead of mail1.test * camel/camel-mime-part.c (_add_header): added comments svn path=/trunk/; revision=984 --- camel/gmime-content-field.c | 81 +++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 22 deletions(-) (limited to 'camel/gmime-content-field.c') diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c index 6cd368664e..a22bbe2979 100644 --- a/camel/gmime-content-field.c +++ b/camel/gmime-content-field.c @@ -27,6 +27,7 @@ #include "gmime-content-field.h" #include "gstring-util.h" + GMimeContentField * gmime_content_field_new (GString *type, GString *subtype) { @@ -41,7 +42,7 @@ gmime_content_field_new (GString *type, GString *subtype) void -gmime_content_field_set_parameter(GMimeContentField *content_field, GString *attribute, GString *value) +gmime_content_field_set_parameter (GMimeContentField *content_field, GString *attribute, GString *value) { gboolean attribute_exists; GString *old_attribute; @@ -86,23 +87,34 @@ gmime_content_field_write_to_stream (GMimeContentField *content_field, CamelStre { if (!content_field) return; if ((content_field->type) && ((content_field->type)->str)) { - //fprintf (file, "Content-Type: %s", content_field->type->str); camel_stream_write_strings (stream, "Content-Type: ", content_field->type->str, NULL); if ((content_field->subtype) && ((content_field->subtype)->str)) { - //fprintf (file, "/%s", content_field->subtype->str); camel_stream_write_strings (stream, "/", content_field->subtype->str, NULL); } /* print all parameters */ g_hash_table_foreach (content_field->parameters, _print_parameter, stream); - //fprintf (file, "\n"); camel_stream_write_string (stream, "\n"); } } -GMimeContentField * -gmime_content_field_construct_from_string (GString *string) +GString * +gmime_content_field_get_mime_type (GMimeContentField *content_field) +{ + GString *mime_type; + + if (!content_field->type) return NULL; + mime_type = g_string_clone (content_field->type); + if (content_field->subtype) { + g_string_append_c (mime_type, '/'); + g_string_append_g_string (mime_type, content_field->subtype); + } + return mime_type; +} + + +void +gmime_content_field_construct_from_string (GMimeContentField *content_field, GString *string) { - GMimeContentField *cf; gint first, len; gchar *str; gint i=0; @@ -113,31 +125,38 @@ gmime_content_field_construct_from_string (GString *string) g_assert (string); g_assert (string->str); - cf = g_new (GMimeContentField,1); + if (content_field->type) g_string_free (content_field->type, FALSE); + if (content_field->subtype) g_string_free (content_field->subtype, FALSE); + str = string->str; first = 0; len = string->len; - if (!len) return NULL; + if (!len) return; /* find the type */ while ( (itype = type; - type = g_string_new (strndup (str, i)); - if (i == len) return (gmime_content_field_new (type, NULL)); + if (i == len) { + content_field->subtype = NULL; + return; + } first = i+1; /* find the subtype, if any */ if (str[i++] == '/') { while ( (isubtype = subtype; + if (i == len) return; } } first = i+1; - cf = gmime_content_field_new (type, subtype); /* parse parameters list */ param_end = FALSE; @@ -146,17 +165,35 @@ gmime_content_field_construct_from_string (GString *string) if ((i == len) || (i==first)) param_end = TRUE; else { /* we have found parameter name */ - param_name = g_string_new (strndup (str+first, i-first)); + param_name = g_string_new (g_strndup (str+first, i-first)); i++; first = i; + /* Let's find parameter value */ while ( (iparameters, _free_parameter, NULL); + g_string_free (content_field->type, FALSE); + g_string_free (content_field->subtype, FALSE); + g_hash_table_destroy (content_field->parameters); + g_free (content_field); } -- cgit v1.2.3