1 #undef G_DISABLE_ASSERT
12 #define BUFFER_SIZE 1024
15 test_small_writes (void)
23 io
= g_io_channel_new_file ("iochannel-test-outfile", "w", &error
);
26 g_warning ("Unable to open file %s: %s",
27 "iochannel-test-outfile",
34 g_io_channel_set_encoding (io
, NULL
, NULL
);
35 g_io_channel_set_buffer_size (io
, 1022);
37 cnt
= 2 * g_io_channel_get_buffer_size (io
);
42 status
= g_io_channel_write_chars (io
, &tmp
, 1, NULL
, NULL
);
43 if (status
== G_IO_STATUS_ERROR
)
45 if (status
== G_IO_STATUS_NORMAL
)
49 g_assert (status
== G_IO_STATUS_NORMAL
);
51 g_io_channel_unref (io
);
55 gint
main (gint argc
, gchar
* argv
[])
57 GIOChannel
*gio_r
, *gio_w
;
61 char *srcdir
= getenv ("srcdir");
65 const gchar encoding
[] = "EUC-JP";
71 filename
= g_strconcat (srcdir
, G_DIR_SEPARATOR_S
, "iochannel-test-infile", NULL
);
73 setbuf (stdout
, NULL
); /* For debugging */
75 gio_r
= g_io_channel_new_file (filename
, "r", &gerr
);
78 g_warning ("Unable to open file %s: %s", filename
, gerr
->message
);
82 gio_w
= g_io_channel_new_file ("iochannel-test-outfile", "w", &gerr
);
85 g_warning ("Unable to open file %s: %s", "iochannel-test-outfile", gerr
->message
);
90 g_io_channel_set_encoding (gio_r
, encoding
, &gerr
);
93 g_warning (gerr
->message
);
94 /* Keep going if this is just a case of iconv not supporting EUC-JP, see bug 428048 */
95 if (gerr
->code
!= G_CONVERT_ERROR_NO_CONVERSION
)
101 g_io_channel_set_buffer_size (gio_r
, BUFFER_SIZE
);
103 status
= g_io_channel_set_flags (gio_r
, G_IO_FLAG_NONBLOCK
, &gerr
);
104 if (status
== G_IO_STATUS_ERROR
)
106 g_warning (gerr
->message
);
110 flags
= g_io_channel_get_flags (gio_r
);
111 buffer
= g_string_sized_new (BUFFER_SIZE
);
116 status
= g_io_channel_read_line_string (gio_r
, buffer
, NULL
, &gerr
);
117 while (status
== G_IO_STATUS_AGAIN
);
118 if (status
!= G_IO_STATUS_NORMAL
)
121 rlength
+= buffer
->len
;
124 status
= g_io_channel_write_chars (gio_w
, buffer
->str
, buffer
->len
,
126 while (status
== G_IO_STATUS_AGAIN
);
127 if (status
!= G_IO_STATUS_NORMAL
)
130 wlength
+= length_out
;
132 if (length_out
< buffer
->len
)
133 g_warning ("Only wrote part of the line.");
136 g_print ("%s", buffer
->str
);
138 g_string_truncate (buffer
, 0);
143 case G_IO_STATUS_EOF
:
145 case G_IO_STATUS_ERROR
:
146 g_warning (gerr
->message
);
151 g_warning ("Abnormal exit from write loop.");
156 status
= g_io_channel_flush (gio_w
, &gerr
);
157 while (status
== G_IO_STATUS_AGAIN
);
159 if (status
== G_IO_STATUS_ERROR
)
161 g_warning (gerr
->message
);
167 g_print ("read %d bytes, wrote %ld bytes\n", rlength
, wlength
);
170 g_io_channel_unref(gio_r
);
171 g_io_channel_unref(gio_w
);
173 test_small_writes ();