1 #undef G_DISABLE_ASSERT
12 #define BUFFER_SIZE 1024
14 gint
main (gint argc
, gchar
* argv
[])
16 GIOChannel
*gio_r
, *gio_w
;
20 char *srcdir
= getenv ("srcdir");
25 const gchar encoding
[] = "EUC-JP";
31 filename
= g_strconcat (srcdir
, G_DIR_SEPARATOR_S
, "iochannel-test-infile", NULL
);
33 setbuf(stdout
, NULL
); /* For debugging */
35 gio_r
= g_io_channel_new_file (filename
, "r", &gerr
);
38 g_warning("Unable to open file %s: %s", filename
, gerr
->message
);
42 gio_w
= g_io_channel_new_file( "iochannel-test-outfile", "w", &gerr
);
45 g_warning("Unable to open file %s: %s", "iochannel-test-outfile", gerr
->message
);
50 g_io_channel_set_encoding (gio_r
, encoding
, &gerr
);
53 g_warning(gerr
->message
);
58 g_io_channel_set_buffer_size (gio_r
, BUFFER_SIZE
);
60 status
= g_io_channel_set_flags (gio_r
, G_IO_FLAG_NONBLOCK
, &gerr
);
61 if (status
== G_IO_STATUS_ERROR
)
63 g_warning(gerr
->message
);
67 flags
= g_io_channel_get_flags (gio_r
);
68 block
= ! (flags
& G_IO_FLAG_NONBLOCK
);
70 g_print (" BLOCKING TRUE \n\n");
72 g_print (" BLOCKING FALSE \n\n");
74 buffer
= g_string_sized_new (BUFFER_SIZE
);
79 status
= g_io_channel_read_line_string (gio_r
, buffer
, NULL
, &gerr
);
80 while (status
== G_IO_STATUS_AGAIN
);
81 if (status
!= G_IO_STATUS_NORMAL
)
84 rlength
+= buffer
->len
;
87 status
= g_io_channel_write_chars (gio_w
, buffer
->str
, buffer
->len
,
89 while (status
== G_IO_STATUS_AGAIN
);
90 if (status
!= G_IO_STATUS_NORMAL
)
93 wlength
+= length_out
;
95 if (length_out
< buffer
->len
)
96 g_warning ("Only wrote part of the line.");
98 g_print ("%s", buffer
->str
);
99 g_string_truncate (buffer
, 0);
104 case G_IO_STATUS_EOF
:
106 case G_IO_STATUS_ERROR
:
107 g_warning (gerr
->message
);
112 g_warning ("Abnormal exit from write loop.");
117 status
= g_io_channel_flush (gio_w
, &gerr
);
118 while (status
== G_IO_STATUS_AGAIN
);
120 if (status
== G_IO_STATUS_ERROR
)
122 g_warning(gerr
->message
);
127 g_print ("read %d bytes, wrote %ld bytes\n", rlength
, wlength
);
129 g_io_channel_unref(gio_r
);
130 g_io_channel_unref(gio_w
);