util: convenience function to create gmime stream for stdout

It turns out that our use of GMimeStreamPipe has only succeeded
because gmime has been ignoring some seek failures; this will no
longer be the case in gmime 3.0, so we use a GMimeStreamPipe, which
does not assume seekability, wrapped in a buffering stream.
This commit is contained in:
David Bremner 2017-05-27 13:51:11 -03:00
parent 427fa5e6e6
commit 1e7dbf7abc
3 changed files with 27 additions and 1 deletions

View file

@ -5,7 +5,7 @@ extra_cflags += -I$(srcdir)/$(dir)
libnotmuch_util_c_srcs := $(dir)/xutil.c $(dir)/error_util.c $(dir)/hex-escape.c \ libnotmuch_util_c_srcs := $(dir)/xutil.c $(dir)/error_util.c $(dir)/hex-escape.c \
$(dir)/string-util.c $(dir)/talloc-extra.c $(dir)/zlib-extra.c \ $(dir)/string-util.c $(dir)/talloc-extra.c $(dir)/zlib-extra.c \
$(dir)/util.c $(dir)/util.c $(dir)/gmime-extra.c
libnotmuch_util_modules := $(libnotmuch_util_c_srcs:.c=.o) libnotmuch_util_modules := $(libnotmuch_util_c_srcs:.c=.o)

20
util/gmime-extra.c Normal file
View file

@ -0,0 +1,20 @@
#include "gmime-extra.h"
GMimeStream *
g_mime_stream_stdout_new()
{
GMimeStream *stream_stdout = NULL;
GMimeStream *stream_buffered = NULL;
stream_stdout = g_mime_stream_pipe_new (STDOUT_FILENO);
if (!stream_stdout)
return NULL;
g_mime_stream_pipe_set_owner (GMIME_STREAM_PIPE (stream_stdout), FALSE);
stream_buffered = g_mime_stream_buffer_new (stream_stdout, GMIME_STREAM_BUFFER_BLOCK_WRITE);
g_object_unref (stream_stdout);
return stream_buffered;
}

6
util/gmime-extra.h Normal file
View file

@ -0,0 +1,6 @@
#ifndef _GMIME_EXTRA_H
#define _GMIME_EXTRA_H
#include <gmime/gmime.h>
GMimeStream *g_mime_stream_stdout_new(void);
#endif