1 /* Unix pipe-to-self. This is a utility module for tests, not a test.
3 * Copyright © 2008-2010 Red Hat, Inc.
4 * Copyright © 2011 Nokia Corporation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General
17 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 * Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
27 #include "test-io-stream.h"
28 #include "test-pipe-unix.h"
31 # include <gio/gunixinputstream.h>
32 # include <gio/gunixoutputstream.h>
34 # error This module only exists on Unix
39 * @is: (out) (optional): used to return a #GInputStream
40 * @os: (out) (optional): used to return a #GOutputStream
41 * @error: used to raise an error
43 * Return a "pipe to self" connecting @is to @os. This can be used
44 * as a unidirectional pipe to or from a child process, for instance.
46 * See test_bidi_pipe() if you want to emulate a bidirectional pipe
47 * via a pair of unidirectional pipes.
49 * Returns: %TRUE on success
52 test_pipe (GInputStream
**is
,
65 g_set_error (error
, G_IO_ERROR
, g_io_error_from_errno (e
),
66 "%s", g_strerror (e
));
71 *is
= g_unix_input_stream_new (pipefd
[0], TRUE
);
76 *os
= g_unix_output_stream_new (pipefd
[1], TRUE
);
85 * @left: (out) (optional): used to return one #GIOStream
86 * @right: (out) (optional): used to return the other #GIOStream
87 * @error: used to raise an error
89 * Return two #GIOStream<!---->s connected to each other with pipes.
90 * The "left" input stream is connected by a unidirectional pipe
91 * to the "right" output stream, and vice versa. This can be used
92 * as a bidirectional pipe to a child process, for instance.
94 * See test_pipe() if you only need a one-way pipe.
96 * Returns: %TRUE on success
99 test_bidi_pipe (GIOStream
**left
,
103 GInputStream
*left_in
= NULL
;
104 GOutputStream
*left_out
= NULL
;
105 GInputStream
*right_in
= NULL
;
106 GOutputStream
*right_out
= NULL
;
107 gboolean ret
= FALSE
;
109 if (!test_pipe (&left_in
, &right_out
, error
))
112 if (!test_pipe (&right_in
, &left_out
, error
))
116 *left
= test_io_stream_new (left_in
, left_out
);
119 *right
= test_io_stream_new (right_in
, right_out
);
124 g_clear_object (&left_in
);
125 g_clear_object (&left_out
);
126 g_clear_object (&right_in
);
127 g_clear_object (&right_out
);