X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fiochannel-test.c;h=06a85e5d068be97663945cd33fca67e101cada86;hb=b768d0e4eaf15934067557cfee6b8beebca5df42;hp=138c00e005203bfdd84d9dacefe8c76370f1a7a8;hpb=ac1080ee3b1aa149edb1839d33249e516c5d6db7;p=platform%2Fupstream%2Fglib.git diff --git a/tests/iochannel-test.c b/tests/iochannel-test.c index 138c00e..06a85e5 100644 --- a/tests/iochannel-test.c +++ b/tests/iochannel-test.c @@ -11,48 +11,88 @@ #define BUFFER_SIZE 1024 +static void +test_small_writes (void) +{ + GIOChannel *io; + GIOStatus status = G_IO_STATUS_ERROR; + guint cnt; + gchar tmp; + GError *error = NULL; + + io = g_io_channel_new_file ("iochannel-test-outfile", "w", &error); + if (error) + { + g_warning ("Unable to open file %s: %s", + "iochannel-test-outfile", + error->message); + g_clear_error (&error); + + exit (1); + } + + g_io_channel_set_encoding (io, NULL, NULL); + g_io_channel_set_buffer_size (io, 1022); + + cnt = 2 * g_io_channel_get_buffer_size (io); + tmp = 0; + + while (cnt) + { + status = g_io_channel_write_chars (io, &tmp, 1, NULL, NULL); + if (status == G_IO_STATUS_ERROR) + break; + if (status == G_IO_STATUS_NORMAL) + cnt--; + } + + g_assert (status == G_IO_STATUS_NORMAL); + + g_io_channel_unref (io); +} + + gint main (gint argc, gchar * argv[]) { GIOChannel *gio_r, *gio_w ; GError *gerr = NULL; GString *buffer; char *filename; - char *srcdir = getenv ("srcdir"); gint rlength = 0; glong wlength = 0; gsize length_out; - gboolean block; const gchar encoding[] = "EUC-JP"; GIOStatus status; - GIOFlags flags; - if (!srcdir) - srcdir = "."; - filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "iochannel-test-infile", NULL); - - setbuf(stdout, NULL); /* For debugging */ + g_test_init (&argc, &argv, NULL); + + filename = g_test_build_filename (G_TEST_DIST, "iochannel-test-infile", NULL); + + setbuf (stdout, NULL); /* For debugging */ gio_r = g_io_channel_new_file (filename, "r", &gerr); if (gerr) { - g_warning("Unable to open file %s: %s", filename, gerr->message); - g_error_free(gerr); + g_warning ("Unable to open file %s: %s", filename, gerr->message); + g_clear_error (&gerr); return 1; } - gio_w = g_io_channel_new_file( "iochannel-test-outfile", "w", &gerr); + gio_w = g_io_channel_new_file ("iochannel-test-outfile", "w", &gerr); if (gerr) { - g_warning("Unable to open file %s: %s", "iochannel-test-outfile", gerr->message); - g_error_free(gerr); + g_warning ("Unable to open file %s: %s", "iochannel-test-outfile", gerr->message); + g_clear_error (&gerr); return 1; } g_io_channel_set_encoding (gio_r, encoding, &gerr); if (gerr) { - g_warning(gerr->message); - g_error_free(gerr); - return 1; + g_warning ("%s", gerr->message); + /* Keep going if this is just a case of iconv not supporting EUC-JP, see bug 428048 */ + if (gerr->code != G_CONVERT_ERROR_NO_CONVERSION) + return 1; + g_clear_error (&gerr); } g_io_channel_set_buffer_size (gio_r, BUFFER_SIZE); @@ -60,17 +100,9 @@ gint main (gint argc, gchar * argv[]) status = g_io_channel_set_flags (gio_r, G_IO_FLAG_NONBLOCK, &gerr); if (status == G_IO_STATUS_ERROR) { - g_warning(gerr->message); - g_error_free(gerr); - gerr = NULL; + g_warning ("%s", gerr->message); + g_clear_error (&gerr); } - flags = g_io_channel_get_flags (gio_r); - block = ! (flags & G_IO_FLAG_NONBLOCK); - if (block) - g_print (" BLOCKING TRUE \n\n"); - else - g_print (" BLOCKING FALSE \n\n"); - buffer = g_string_sized_new (BUFFER_SIZE); while (TRUE) @@ -95,7 +127,9 @@ gint main (gint argc, gchar * argv[]) if (length_out < buffer->len) g_warning ("Only wrote part of the line."); +#ifdef VERBOSE g_print ("%s", buffer->str); +#endif g_string_truncate (buffer, 0); } @@ -104,9 +138,8 @@ gint main (gint argc, gchar * argv[]) case G_IO_STATUS_EOF: break; case G_IO_STATUS_ERROR: - g_warning (gerr->message); - g_error_free (gerr); - gerr = NULL; + g_warning ("%s", gerr->message); + g_clear_error (&gerr); break; default: g_warning ("Abnormal exit from write loop."); @@ -119,15 +152,21 @@ gint main (gint argc, gchar * argv[]) if (status == G_IO_STATUS_ERROR) { - g_warning(gerr->message); - g_error_free(gerr); - gerr = NULL; + g_warning ("%s", gerr->message); + g_clear_error (&gerr); } +#ifdef VERBOSE g_print ("read %d bytes, wrote %ld bytes\n", rlength, wlength); +#endif g_io_channel_unref(gio_r); g_io_channel_unref(gio_w); - + + test_small_writes (); + + g_free (filename); + g_string_free (buffer, TRUE); + return 0; }