don't seek the begining of the substream. (_eos): fix eos condition
2000-02-16 bertrand <Bertrand.Guiheneuf@aful.org> * camel/camel-seekable-substream.c (_set_bounds): don't seek the begining of the substream. (_eos): fix eos condition testing. (_finalize): unref parent stream (_init_with_seekable_stream_and_bounds): ref parent stream * camel/gstring-util.c (g_string_equal_for_hash): (g_string_equal_for_glist): return type is int. * camel/camel.h: * camel/camel.c (camel_init): use (void) instead of (). A lot of other small changes to make the set_input_stream scheme work. It actually works. svn path=/trunk/; revision=1798
This commit is contained in:
committed by
Bertrand Guiheneuf
parent
d2239da3e7
commit
7f04720b1e
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
2000-02-16 bertrand <Bertrand.Guiheneuf@aful.org>
|
||||
|
||||
* camel/camel-seekable-substream.c (_set_bounds): don't
|
||||
seek the begining of the substream.
|
||||
(_eos): fix eos condition testing.
|
||||
(_finalize): unref parent stream
|
||||
(_init_with_seekable_stream_and_bounds): ref parent stream
|
||||
|
||||
* camel/gstring-util.c (g_string_equal_for_hash):
|
||||
(g_string_equal_for_glist): return type is int.
|
||||
|
||||
* camel/camel.h:
|
||||
* camel/camel.c (camel_init): use (void)
|
||||
instead of ().
|
||||
|
||||
|
||||
2000-02-15 bertrand <bertrand@helixcode.com>
|
||||
|
||||
* camel/camel-multipart.c (_localize_part):
|
||||
|
||||
@ -234,7 +234,6 @@ _finalize (GtkObject *object)
|
||||
{
|
||||
CamelFolder *camel_folder = CAMEL_FOLDER (object);
|
||||
CamelFolderPtProxy *camel_folder_pt_proxy = CAMEL_FOLDER_PT_PROXY (camel_folder);
|
||||
GList *message_node;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelFolderPtProxy::finalize\n");
|
||||
|
||||
|
||||
@ -83,6 +83,8 @@ typedef struct {
|
||||
} CamelFolderPtProxyClass;
|
||||
|
||||
|
||||
GtkType camel_folder_pt_proxy_get_type (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
@ -43,7 +43,6 @@ static CamelMimePartClass *parent_class=NULL;
|
||||
static void
|
||||
camel_mime_body_part_class_init (CamelMimeBodyPartClass *camel_mime_body_part_class)
|
||||
{
|
||||
CamelMimePartClass *camel_mime_part_class = CAMEL_MIME_PART_CLASS (camel_mime_body_part_class);
|
||||
parent_class = gtk_type_class (camel_mime_part_get_type ());
|
||||
|
||||
/* virtual method definition */
|
||||
@ -54,7 +53,6 @@ camel_mime_body_part_class_init (CamelMimeBodyPartClass *camel_mime_body_part_cl
|
||||
static void
|
||||
camel_mime_body_part_init (gpointer object, gpointer klass)
|
||||
{
|
||||
CamelMimeBodyPart *camel_mime_body_part = CAMEL_MIME_BODY_PART (object);
|
||||
camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (object), "mime/body-part");
|
||||
}
|
||||
|
||||
@ -86,7 +84,7 @@ camel_mime_body_part_get_type (void)
|
||||
}
|
||||
|
||||
CamelMimeBodyPart *
|
||||
camel_mime_body_part_new ()
|
||||
camel_mime_body_part_new (void)
|
||||
{
|
||||
CamelMimeBodyPart *mime_body_part;
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMimeBodyPart:: Entering new()\n");
|
||||
|
||||
@ -61,7 +61,8 @@ typedef struct {
|
||||
CamelMimePartClass parent_class;
|
||||
|
||||
/* Virtual methods */
|
||||
void (*set_parent) (CamelMimeBodyPart *mime_body_part, CamelMultipart *multipart);
|
||||
void (*set_parent) (CamelMimeBodyPart *mime_body_part,
|
||||
CamelMultipart *multipart);
|
||||
const CamelMultipart * (*get_parent) (CamelMimeBodyPart *mime_body_part);
|
||||
|
||||
} CamelMimeBodyPartClass;
|
||||
@ -72,8 +73,9 @@ GtkType camel_mime_body_part_get_type (void);
|
||||
|
||||
|
||||
/* public methods */
|
||||
CamelMimeBodyPart *camel_mime_body_part_new ();
|
||||
void camel_mime_body_part_set_parent (CamelMimeBodyPart *mime_body_part, CamelMultipart *multipart);
|
||||
CamelMimeBodyPart * camel_mime_body_part_new (void);
|
||||
void camel_mime_body_part_set_parent (CamelMimeBodyPart *mime_body_part,
|
||||
CamelMultipart *multipart);
|
||||
const CamelMultipart *camel_mime_body_part_get_parent (CamelMimeBodyPart *mime_body_part);
|
||||
|
||||
|
||||
|
||||
@ -87,6 +87,7 @@ camel_mime_part_construct_content_from_stream (CamelMimePart *mime_part,
|
||||
GtkType content_object_type;
|
||||
CamelDataWrapper *content_object = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* find content mime type
|
||||
*/
|
||||
|
||||
@ -818,7 +818,7 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
guint32 content_stream_inf_bound;
|
||||
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMimePart::construct_from_stream entering\n");
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMimePart::set_input_stream entering\n");
|
||||
|
||||
g_assert (CAMEL_IS_SEEKABLE_STREAM (stream));
|
||||
seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
|
||||
@ -831,6 +831,7 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_stream,
|
||||
content_stream_inf_bound,
|
||||
-1);
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMimePart::set_input_stream leaving\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -26,30 +26,44 @@
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "camel-multipart.h"
|
||||
#include "camel-log.h"
|
||||
#include "gmime-content-field.h"
|
||||
#include "gmime-utils.h"
|
||||
#include "camel-stream-mem.h"
|
||||
#include "camel-seekable-substream.h"
|
||||
|
||||
#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 _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
|
||||
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 _finalize (GtkObject *object);
|
||||
|
||||
static CamelDataWrapperClass *parent_class=NULL;
|
||||
|
||||
|
||||
|
||||
/* Returns the class for a CamelMultipart */
|
||||
#define CMP_CLASS(so) CAMEL_MULTIPART_CLASS (GTK_OBJECT(so)->klass)
|
||||
|
||||
@ -79,7 +93,7 @@ camel_multipart_class_init (CamelMultipartClass *camel_multipart_class)
|
||||
|
||||
/* 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->set_input_stream = _set_input_stream;
|
||||
|
||||
gtk_object_class->finalize = _finalize;
|
||||
}
|
||||
@ -150,8 +164,9 @@ _finalize (GtkObject *object)
|
||||
}
|
||||
|
||||
|
||||
CamelMultipart *
|
||||
camel_multipart_new ()
|
||||
|
||||
CamelMultipart *
|
||||
camel_multipart_new (void)
|
||||
{
|
||||
CamelMultipart *multipart;
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Entering new()\n");
|
||||
@ -177,7 +192,7 @@ void
|
||||
camel_multipart_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part)
|
||||
{
|
||||
CMP_CLASS (multipart)->add_part (multipart, part);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
@ -401,117 +416,6 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* _read_part: read one part in a multipart environement.
|
||||
* @new_part_stream: stream to add the part to
|
||||
* @stream: the stream to read the lines from.
|
||||
* @normal_boundary: end of part bundary.
|
||||
* @end_boundary: end of multipart boundary.
|
||||
*
|
||||
* This routine is a bit special: RFC 2046 says that, in a multipart
|
||||
* environment, the last crlf before a boundary belongs to the boundary.
|
||||
* Thus, if there is no blank line before the boundary, the last crlf
|
||||
* of the last line of the part is removed.
|
||||
*
|
||||
* Return value: true if the last boundary element has been found or if no more data was available from the stream, flase otherwise
|
||||
**/
|
||||
|
||||
static gboolean
|
||||
_read_part (CamelStream *new_part_stream, CamelStream *stream, gchar *normal_boundary, gchar *end_boundary)
|
||||
{
|
||||
gchar *new_line = NULL;
|
||||
gboolean end_of_part = FALSE;
|
||||
gboolean last_part = FALSE;
|
||||
gboolean first_line = TRUE;
|
||||
|
||||
/* 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 _read_part\n");
|
||||
|
||||
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);
|
||||
if (!end_of_part && !last_part) {
|
||||
if (first_line) {
|
||||
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);
|
||||
else last_part = TRUE;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving _read_part\n");
|
||||
return (last_part);
|
||||
}
|
||||
|
||||
static void
|
||||
_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
{
|
||||
CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
|
||||
const gchar *boundary;
|
||||
gchar *real_boundary_line;
|
||||
gchar *end_boundary_line;
|
||||
CamelStream *new_part_stream;
|
||||
gboolean end_of_multipart;
|
||||
CamelMimeBodyPart *body_part;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_construct_from_stream\n");
|
||||
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 */
|
||||
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);
|
||||
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); */
|
||||
|
||||
/* read all the real parts */
|
||||
while (!end_of_multipart) {
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart::construct_from_stream, detected a new part\n");
|
||||
new_part_stream = camel_stream_mem_new (CAMEL_STREAM_MEM_RW);
|
||||
body_part = camel_mime_body_part_new ();
|
||||
|
||||
end_of_multipart = _read_part ( new_part_stream, stream, real_boundary_line, end_boundary_line);
|
||||
camel_seekable_stream_seek (new_part_stream, 0, CAMEL_STREAM_SET);
|
||||
camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (body_part), new_part_stream);
|
||||
camel_multipart_add_part (multipart, body_part);
|
||||
gtk_object_destroy (GTK_OBJECT (new_part_stream));
|
||||
|
||||
}
|
||||
|
||||
/* g_string_assign (new_part, ""); */
|
||||
/* _read_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::_construct_from_stream\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -543,7 +447,6 @@ _localize_part (CamelStream *stream,
|
||||
gchar *new_line = NULL;
|
||||
gboolean end_of_part = FALSE;
|
||||
gboolean last_part = FALSE;
|
||||
gboolean first_line = TRUE;
|
||||
guint32 last_position;
|
||||
|
||||
/* Note for future enhancements */
|
||||
@ -553,8 +456,11 @@ _localize_part (CamelStream *stream,
|
||||
* transport, the parsing should still be OK */
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Entering _localize_part\n");
|
||||
|
||||
last_position = camel_seekable_stream_get_current_position (stream);
|
||||
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);
|
||||
@ -562,7 +468,9 @@ _localize_part (CamelStream *stream,
|
||||
|
||||
g_free (new_line);
|
||||
|
||||
last_position = camel_seekable_stream_get_current_position (stream);
|
||||
last_position =
|
||||
camel_seekable_stream_get_current_position (CAMEL_SEEKABLE_STREAM (stream));
|
||||
|
||||
new_line = gmime_read_line_from_stream (stream);
|
||||
}
|
||||
}
|
||||
@ -570,7 +478,7 @@ _localize_part (CamelStream *stream,
|
||||
if (new_line) g_free (new_line);
|
||||
else last_part = TRUE;
|
||||
|
||||
*end_position = last_position
|
||||
*end_position = last_position;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart:: Leaving _localize_part\n");
|
||||
return (last_part);
|
||||
@ -583,16 +491,18 @@ static void
|
||||
_set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
{
|
||||
CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
|
||||
CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
|
||||
const gchar *boundary;
|
||||
gchar *real_boundary_line;
|
||||
gchar *end_boundary_line;
|
||||
CamelStream *new_part_stream;
|
||||
gboolean end_of_multipart;
|
||||
CamelMimeBodyPart *body_part;
|
||||
guint32 part_begining, part_end;
|
||||
CamelSeekableSubstream *body_part_input_stream;
|
||||
guint32 saved_stream_pos;
|
||||
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_construct_from_stream\n");
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelMultipart::_set_input_stream\n");
|
||||
boundary = camel_multipart_get_boundary (multipart);
|
||||
g_return_if_fail (boundary);
|
||||
|
||||
@ -612,9 +522,9 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
/* 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 (stream);
|
||||
part_begining = camel_seekable_stream_get_current_position (seekable_stream);
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("CamelMultipart::construct_from_stream, detected a new part\n");
|
||||
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,
|
||||
@ -625,8 +535,18 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_stream,
|
||||
part_begining,
|
||||
part_end);
|
||||
|
||||
camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (body_part), body_part_input_stream);
|
||||
|
||||
/* 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));
|
||||
|
||||
/* 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);
|
||||
|
||||
}
|
||||
@ -641,5 +561,5 @@ _set_input_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
|
||||
|
||||
g_free (real_boundary_line);
|
||||
g_free (end_boundary_line);
|
||||
CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::_construct_from_stream\n");
|
||||
CAMEL_LOG_FULL_DEBUG ("Leaving CamelMultipart::_set_input_stream\n");
|
||||
}
|
||||
|
||||
@ -84,17 +84,25 @@ GtkType camel_multipart_get_type (void);
|
||||
|
||||
|
||||
/* public methods */
|
||||
CamelMultipart *camel_multipart_new ();
|
||||
void camel_multipart_add_part (CamelMultipart *multipart, CamelMimeBodyPart *part);
|
||||
void camel_multipart_add_part_at (CamelMultipart *multipart, CamelMimeBodyPart *part, guint index);
|
||||
void camel_multipart_remove_part (CamelMultipart *multipart, CamelMimeBodyPart *part);
|
||||
CamelMimeBodyPart *camel_multipart_remove_part_at (CamelMultipart *multipart, guint index);
|
||||
CamelMimeBodyPart *camel_multipart_get_part (CamelMultipart *multipart, guint index);
|
||||
guint camel_multipart_get_number (CamelMultipart *multipart);
|
||||
void camel_multipart_set_parent (CamelMultipart *multipart, CamelMimePart *parent);
|
||||
CamelMimePart *camel_multipart_get_parent (CamelMultipart *multipart);
|
||||
void camel_multipart_set_boundary (CamelMultipart *multipart, gchar *boundary);
|
||||
const gchar *camel_multipart_get_boundary (CamelMultipart *multipart);
|
||||
CamelMultipart * camel_multipart_new (void);
|
||||
void camel_multipart_add_part (CamelMultipart *multipart,
|
||||
CamelMimeBodyPart *part);
|
||||
void camel_multipart_add_part_at (CamelMultipart *multipart,
|
||||
CamelMimeBodyPart *part,
|
||||
guint index);
|
||||
void camel_multipart_remove_part (CamelMultipart *multipart,
|
||||
CamelMimeBodyPart *part);
|
||||
CamelMimeBodyPart * camel_multipart_remove_part_at (CamelMultipart *multipart,
|
||||
guint index);
|
||||
CamelMimeBodyPart * camel_multipart_get_part (CamelMultipart *multipart,
|
||||
guint index);
|
||||
guint camel_multipart_get_number (CamelMultipart *multipart);
|
||||
void camel_multipart_set_parent (CamelMultipart *multipart,
|
||||
CamelMimePart *parent);
|
||||
CamelMimePart * camel_multipart_get_parent (CamelMultipart *multipart);
|
||||
void camel_multipart_set_boundary (CamelMultipart *multipart,
|
||||
gchar *boundary);
|
||||
const gchar * camel_multipart_get_boundary (CamelMultipart *multipart);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -142,11 +142,14 @@ _destroy (GtkObject *object)
|
||||
static void
|
||||
_finalize (GtkObject *object)
|
||||
{
|
||||
|
||||
|
||||
CamelSeekableStream *seekable_stream;
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelSeekableSubstream::finalize\n");
|
||||
|
||||
/* does nothing for the moment */
|
||||
seekable_stream = CAMEL_SEEKABLE_STREAM (object);
|
||||
|
||||
if (seekable_stream->parent_stream)
|
||||
gtk_object_unref (seekable_stream->parent_stream);
|
||||
|
||||
GTK_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
CAMEL_LOG_FULL_DEBUG ("Leaving CamelSeekableSubstream::finalize\n");
|
||||
}
|
||||
@ -165,8 +168,6 @@ _set_bounds (CamelSeekableSubstream *seekable_substream, guint32 inf_bound, gint
|
||||
seekable_substream->inf_bound = inf_bound;
|
||||
seekable_substream->sup_bound = sup_bound;
|
||||
|
||||
/* go to the first position */
|
||||
camel_seekable_stream_seek (seekable_substream->parent_stream, inf_bound, SEEK_SET);
|
||||
|
||||
seekable_substream->cur_pos = 0;
|
||||
|
||||
@ -194,7 +195,8 @@ _init_with_seekable_stream_and_bounds (CamelSeekableSubstream *seekable_substre
|
||||
|
||||
/* store the parent stream */
|
||||
seekable_substream->parent_stream = parent_stream;
|
||||
|
||||
gtk_object_ref (parent_stream);
|
||||
|
||||
/* set the bound of the substream */
|
||||
_set_bounds (seekable_substream, inf_bound, sup_bound);
|
||||
}
|
||||
@ -245,7 +247,6 @@ _read (CamelStream *stream, gchar *buffer, gint n)
|
||||
|
||||
g_assert (stream);
|
||||
g_assert (seekable_substream->parent_stream);
|
||||
g_assert (seekable_substream->open);
|
||||
|
||||
|
||||
|
||||
@ -300,14 +301,7 @@ _read (CamelStream *stream, gchar *buffer, gint n)
|
||||
seekable_stream->cur_pos += v;
|
||||
|
||||
|
||||
#if 0
|
||||
/* restore the parent position */
|
||||
camel_seekable_stream_seek (seekable_substream->parent_stream,
|
||||
parent_stream_current_position,
|
||||
CAMEL_STREAM_SET);
|
||||
|
||||
|
||||
#endif
|
||||
/* return the number of bytes read */
|
||||
return v;
|
||||
}
|
||||
@ -384,11 +378,10 @@ _eos (CamelStream *stream)
|
||||
gboolean eos;
|
||||
|
||||
g_assert (stream);
|
||||
g_assert (seekable_substream->open);
|
||||
|
||||
if (seekable_substream->sup_bound != -1) {
|
||||
substream_len = seekable_substream->sup_bound - seekable_substream->inf_bound;
|
||||
eos = ( seekable_stream->cur_pos > substream_len);
|
||||
eos = ( seekable_stream->cur_pos >= substream_len);
|
||||
} else {
|
||||
eos = camel_stream_eos (CAMEL_STREAM (seekable_substream->parent_stream));
|
||||
}
|
||||
|
||||
@ -63,12 +63,21 @@ struct _CamelStore
|
||||
typedef struct {
|
||||
CamelServiceClass parent_class;
|
||||
|
||||
void (*init) (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
|
||||
void (*set_separator) (CamelStore *store, gchar sep, CamelException *ex);
|
||||
gchar (*get_separator) (CamelStore *store, CamelException *ex);
|
||||
CamelFolder * (*get_folder) (CamelStore *store, const gchar *folder_name, CamelException *ex);
|
||||
CamelFolder * (*get_root_folder) (CamelStore *store, CamelException *ex);
|
||||
CamelFolder * (*get_default_folder) (CamelStore *store, CamelException *ex);
|
||||
void (*init) (CamelStore *store,
|
||||
CamelSession *session,
|
||||
const gchar *url_name,
|
||||
CamelException *ex);
|
||||
void (*set_separator) (CamelStore *store, gchar sep,
|
||||
CamelException *ex);
|
||||
gchar (*get_separator) (CamelStore *store,
|
||||
CamelException *ex);
|
||||
CamelFolder * (*get_folder) (CamelStore *store,
|
||||
const gchar *folder_name,
|
||||
CamelException *ex);
|
||||
CamelFolder * (*get_root_folder) (CamelStore *store,
|
||||
CamelException *ex);
|
||||
CamelFolder * (*get_default_folder) (CamelStore *store,
|
||||
CamelException *ex);
|
||||
|
||||
} CamelStoreClass;
|
||||
|
||||
@ -78,10 +87,10 @@ typedef struct {
|
||||
/* Standard Gtk function */
|
||||
GtkType camel_store_get_type (void);
|
||||
|
||||
void camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
|
||||
CamelFolder *camel_store_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
|
||||
gchar camel_store_get_separator (CamelStore *store, CamelException *ex);
|
||||
CamelSession *camel_store_get_session (CamelStore *store, CamelException *ex);
|
||||
void camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
|
||||
CamelFolder * camel_store_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
|
||||
gchar camel_store_get_separator (CamelStore *store, CamelException *ex);
|
||||
CamelSession * camel_store_get_session (CamelStore *store, CamelException *ex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -481,11 +481,12 @@ _seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy)
|
||||
gint real_offset;
|
||||
CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
|
||||
|
||||
#if 0
|
||||
/* because we don't know what is going to happen, we
|
||||
set the eof stream to false so that a reread can
|
||||
occur */
|
||||
stream_fs->eof = FALSE;
|
||||
|
||||
#endif
|
||||
switch (policy) {
|
||||
case CAMEL_STREAM_SET:
|
||||
real_offset = MAX (stream_fs->inf_bound + offset, stream_fs->inf_bound);
|
||||
@ -525,7 +526,10 @@ _seek (CamelSeekableStream *stream, gint offset, CamelStreamSeekPolicy policy)
|
||||
|
||||
|
||||
|
||||
printf ("***** Seeking : real_offset=%d, whence=%d\n", real_offset, whence);
|
||||
return_position = lseek (stream_fs->fd, real_offset, whence) - stream_fs->inf_bound;
|
||||
printf ("*** *** *** *** ***\n");
|
||||
|
||||
CAMEL_SEEKABLE_STREAM (stream)->cur_pos = return_position;
|
||||
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ _init_notify_system (CamelThreadProxy *proxy);
|
||||
* Return value: The newly created proxy object
|
||||
**/
|
||||
CamelThreadProxy *
|
||||
camel_thread_proxy_new ()
|
||||
camel_thread_proxy_new (void)
|
||||
{
|
||||
CamelThreadProxy *proxy;
|
||||
|
||||
@ -137,7 +137,6 @@ camel_thread_proxy_free (CamelThreadProxy *proxy)
|
||||
void
|
||||
_op_run_free_and_notify (CamelOp *op)
|
||||
{
|
||||
gboolean error;
|
||||
CamelThreadProxy *th_proxy;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelThreadProxy::_op_run_free_and_notify\n");
|
||||
@ -163,7 +162,6 @@ _run_next_op_in_thread (CamelThreadProxy *proxy)
|
||||
{
|
||||
CamelOp *op;
|
||||
CamelOpQueue *server_op_queue;
|
||||
CamelThreadProxy *th_proxy;
|
||||
pthread_t thread;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelThreadProxy::_run_next_op_in_thread\n");
|
||||
@ -260,7 +258,6 @@ _run_next_cb (CamelThreadProxy *proxy)
|
||||
{
|
||||
CamelOp *op;
|
||||
CamelOpQueue *client_op_queue;
|
||||
CamelThreadProxy *th_proxy;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelThreadProxy::_run_next_cb\n");
|
||||
client_op_queue = proxy->client_op_queue;
|
||||
@ -476,7 +473,6 @@ camel_thread_proxy_add_signals (CamelThreadProxy *proxy,
|
||||
GtkObject *real_object,
|
||||
char *signal_to_proxy[])
|
||||
{
|
||||
GtkType camel_folder_type;
|
||||
guint i;
|
||||
|
||||
CAMEL_LOG_FULL_DEBUG ("Entering CamelThreadProxy::camel_thread_proxy_init_signals\n");
|
||||
|
||||
@ -69,7 +69,7 @@ typedef struct {
|
||||
} CamelThreadProxy;
|
||||
|
||||
|
||||
CamelThreadProxy *camel_thread_proxy_new ();
|
||||
CamelThreadProxy *camel_thread_proxy_new (void);
|
||||
void camel_thread_proxy_free (CamelThreadProxy *proxy);
|
||||
|
||||
void camel_thread_proxy_push_op (CamelThreadProxy *proxy, CamelOp *op);
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
#include "camel.h"
|
||||
|
||||
gint
|
||||
camel_init()
|
||||
camel_init(void)
|
||||
{
|
||||
|
||||
|
||||
|
||||
@ -62,7 +62,7 @@ extern "C" {
|
||||
#include <camel/string-utils.h>
|
||||
#include <camel/url-util.h>
|
||||
|
||||
gint camel_init ();
|
||||
gint camel_init (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -210,11 +210,13 @@ g_string_append_g_string(GString *dest_string, GString *other_string)
|
||||
*
|
||||
* Return value:
|
||||
**/
|
||||
gint
|
||||
g_string_equal_for_hash (gconstpointer v, gconstpointer v2)
|
||||
{
|
||||
return strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
|
||||
}
|
||||
|
||||
gint
|
||||
g_string_equal_for_glist (gconstpointer v, gconstpointer v2)
|
||||
{
|
||||
return !strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
|
||||
|
||||
@ -4,7 +4,6 @@ SUBDIRS =
|
||||
|
||||
libcamelmboxincludedir = $(includedir)/camel
|
||||
|
||||
providerdir = $(libdir)/evolution/camel-providers/$(VERSION)
|
||||
|
||||
provider_LTLIBRARIES = libcamelmbox.la
|
||||
|
||||
|
||||
@ -65,7 +65,6 @@ gchar
|
||||
string_dichotomy (const gchar *string, gchar sep, gchar **prefix, gchar **suffix,
|
||||
StringDichotomyOption options)
|
||||
{
|
||||
gchar *tmp_str;
|
||||
gint sep_pos, first, last, len;
|
||||
|
||||
g_assert (string);
|
||||
|
||||
Reference in New Issue
Block a user