diff --git a/libbalsa/mailbox_mbox.c b/libbalsa/mailbox_mbox.c index b59b98d..fc946e0 100644 --- a/libbalsa/mailbox_mbox.c +++ b/libbalsa/mailbox_mbox.c @@ -112,7 +112,7 @@ struct _LibBalsaMailboxMbox { GPtrArray *msgno_2_msg_info; GMimeStream *gmime_stream; - gint size; + off_t size; gboolean messages_info_changed; }; @@ -919,10 +919,10 @@ lbm_mbox_check_file(LibBalsaMailboxMbox * mbox, if (content_length) { /* Seek past the content. */ - ssize_t remaining; + off_t remaining; buffer->start += content_length; - remaining = buffer->end - buffer->start; + remaining = (off_t) buffer->end - (off_t) buffer->start; if (remaining < 0) { g_mime_stream_seek(buffer->stream, -remaining, GMIME_STREAM_SEEK_CUR); @@ -1165,15 +1165,19 @@ static gint lbm_mbox_newline(GMimeStream * stream) { gint retval; - gchar buf[1]; - static gchar newlines[] = "\n\n"; + static const gchar newlines[] = "\n\n"; - retval = g_mime_stream_seek(stream, -1, GMIME_STREAM_SEEK_CUR); - if (retval >= 0) - retval = g_mime_stream_read(stream, buf, 1); - if (retval == 1) - retval = - g_mime_stream_write(stream, newlines, buf[0] == '\n' ? 1 : 2); + if (g_mime_stream_seek(stream, -1, GMIME_STREAM_SEEK_CUR) < 0) { + retval = -1; + } else { + gchar buf; + + retval = g_mime_stream_read(stream, &buf, 1); + if (retval == 1) { + retval = + g_mime_stream_write(stream, newlines, buf == '\n' ? 1 : 2); + } + } return retval; } @@ -1949,7 +1953,7 @@ lbm_mbox_add_message(LibBalsaMailboxLocal * local, GMimeObject *armored_object; GMimeStream *armored_dest; GMimeStream *dest; - gint retval; + off_t retval; off_t orig_length; message = libbalsa_message_new(); diff --git a/libbalsa/send.c b/libbalsa/send.c index 2122035..e4e47eb 100644 --- a/libbalsa/send.c +++ b/libbalsa/send.c @@ -593,6 +593,8 @@ libbalsa_message_cb (void **buf, int *len, void *arg) return NULL; } + /* note: the following calculation works *only* for messages < 2 GB + * due to the limited range of int, but this should be safe... */ *len = g_mime_stream_length(current_message->stream) - g_mime_stream_tell(current_message->stream); ptr = (char *) mem_stream->buffer->data