diff options
author | bertrand <Bertrand.Guiheneuf@aful.org> | 2000-02-15 06:03:58 +0800 |
---|---|---|
committer | Bertrand Guiheneuf <bertrand@src.gnome.org> | 2000-02-15 06:03:58 +0800 |
commit | fe058b1be72112298e356343f3a8b35fd60a072b (patch) | |
tree | 0e2fe60abb27fa6070dc20f1e427b002c6db6f5a /camel/gmime-utils.c | |
parent | d8efd64ed0bc53ad0a74115c1d14a700b3874013 (diff) | |
download | gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar.gz gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar.bz2 gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar.lz gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar.xz gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.tar.zst gsoc2013-evolution-fe058b1be72112298e356343f3a8b35fd60a072b.zip |
make a blocking version of the header parser. When the fs stream uses
2000-02-14 bertrand <Bertrand.Guiheneuf@aful.org>
* camel/gmime-utils.c (get_header_array_from_stream):
make a blocking version of the header parser.
When the fs stream uses gnome-vfs, this should
be changed.
(gmime_read_line_from_stream): ditto.
2000-02-11 bertrand <Bertrand.Guiheneuf@aful.org>
* camel/camel-stream-fs.c:
everywhere, when using the cur_pos field, do it
on the CamelSeekableStream object.
(_seek): small fix.
* camel/camel-seekable-stream.c (camel_seekable_stream_seek):
s/camel_stream_seek/camel_seekable_stream_seek/g
* camel/camel-seekable-stream.h:
(struct ): added a field to store the
current position.
* camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position):
New function. Allows to get the current position
of a seekable stream.
In fact much more changes, but I am lazy.
This is the begining of some major changes
in camel.
svn path=/trunk/; revision=1778
Diffstat (limited to 'camel/gmime-utils.c')
-rw-r--r-- | camel/gmime-utils.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/camel/gmime-utils.c b/camel/gmime-utils.c index 421808a4d4..1b1f1aa1e1 100644 --- a/camel/gmime-utils.c +++ b/camel/gmime-utils.c @@ -160,7 +160,11 @@ _store_header_pair_from_string (GArray *header_array, gchar *header_line) - +/* + this is a blocking version of the + header parsing. Need to change when + fs streams are non blocking +*/ GArray * get_header_array_from_stream (CamelStream *stream) { @@ -177,8 +181,6 @@ get_header_array_from_stream (CamelStream *stream) gboolean end_of_file = FALSE; GString *header_line=NULL; - gchar *str_header_line; - GArray *header_array; @@ -215,23 +217,29 @@ get_header_array_from_stream (CamelStream *stream) default: if (!crlf) header_line = g_string_append_c (header_line, next_char); else end_of_header_line = TRUE; + } } else { - end_of_file=TRUE; - end_of_header_line = TRUE; + + if (nb_char_read <0) { + end_of_file=TRUE; + end_of_header_line = TRUE; + + } } + /* if we have read a whole header line, we have also read the first character of the next line to be sure the crlf was not followed by a space or a tab char */ if (!end_of_header_line) nb_char_read = camel_stream_read (stream, &next_char, 1); - + } while ( !end_of_header_line ); if ( strlen(header_line->str) ) { /* str_header_line = g_strdup (header_line->str); */ _store_header_pair_from_string (header_array, header_line->str); } g_string_free (header_line, FALSE); - + } while ( (!end_of_headers) && (!end_of_file) ); CAMEL_LOG_FULL_DEBUG ( "gmime-utils:: Leaving get_header_table_from_stream\n"); @@ -239,6 +247,7 @@ get_header_array_from_stream (CamelStream *stream) } + gchar * gmime_read_line_from_stream (CamelStream *stream) { @@ -252,7 +261,9 @@ gmime_read_line_from_stream (CamelStream *stream) new_line = g_string_new (""); do { nb_char_read = camel_stream_read (stream, &next_char, 1); + if (nb_char_read>0) { + switch (next_char) { case '\n': end_of_line = TRUE; @@ -260,13 +271,22 @@ gmime_read_line_from_stream (CamelStream *stream) break; default: g_string_append_c (new_line, next_char); + } - } else end_of_stream = TRUE; + } else { + + if (nb_char_read <0) + end_of_stream = TRUE; + + } } while (!end_of_line && !end_of_stream); + if (!end_of_stream) result = g_strdup (new_line->str); else result=NULL; + g_string_free (new_line, TRUE); + return result; } |