os/ossrv/glib/tsrc/BC/tests/iochannel-test.c
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/ossrv/glib/tsrc/BC/tests/iochannel-test.c	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,175 @@
     1.4 +/* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.*/
     1.5 +
     1.6 +#undef G_DISABLE_ASSERT
     1.7 +#undef G_LOG_DOMAIN
     1.8 +
     1.9 +#include <sys/types.h>
    1.10 +#include <sys/stat.h>
    1.11 +#include <fcntl.h>
    1.12 +#include <glib.h>
    1.13 +#include <string.h>
    1.14 +#include <stdio.h>
    1.15 +#include <stdlib.h>
    1.16 +
    1.17 +#ifdef SYMBIAN
    1.18 +#include "mrt2_glib2_test.h"
    1.19 +#endif /*SYMBIAN*/
    1.20 +
    1.21 +
    1.22 +#define BUFFER_SIZE 1024
    1.23 +
    1.24 +gint main (gint argc, gchar * argv[])
    1.25 +{
    1.26 +    GIOChannel *gio_r, *gio_w ;
    1.27 +    GError *gerr = NULL;
    1.28 +    GString *buffer;
    1.29 +    char *filename;
    1.30 +    char *srcdir = getenv ("srcdir");
    1.31 +    gint rlength = 0;
    1.32 +    glong wlength = 0;
    1.33 +    gsize length_out;
    1.34 +    const gchar encoding[] = "ISO-8859-5";
    1.35 +    GIOStatus status;
    1.36 +    GIOFlags flags;
    1.37 +
    1.38 +  #ifdef SYMBIAN
    1.39 +  g_log_set_handler (NULL,  G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
    1.40 +  g_set_print_handler(mrtPrintHandler);
    1.41 +  #endif /*SYMBIAN*/
    1.42 +	  
    1.43 +
    1.44 +    if (!srcdir)
    1.45 +      srcdir = "c:";
    1.46 +    filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "iochannel-test-infile", NULL);
    1.47 +  
    1.48 +    setbuf (stdout, NULL); /* For debugging */
    1.49 +
    1.50 +    gio_r = g_io_channel_new_file (filename, "r", &gerr);
    1.51 +    if (gerr)
    1.52 +      {
    1.53 +        g_warning ("Unable to open file %s: %s", filename, gerr->message);
    1.54 +        g_error_free (gerr);
    1.55 +        
    1.56 +        g_assert(FALSE && "iochannel-test failed");
    1.57 +        
    1.58 +        #if SYMBIAN
    1.59 +  		testResultXml("iochannel-test");
    1.60 +  		#endif /* EMULATOR */
    1.61 +        
    1.62 +        return 1;
    1.63 +      }
    1.64 +    gio_w = g_io_channel_new_file ("c:\\iochannel-test-outfile", "w", &gerr);
    1.65 +    if (gerr)
    1.66 +      {
    1.67 +        g_warning ("Unable to open file %s: %s", "iochannel-test-outfile", gerr->message);
    1.68 +        g_error_free (gerr);
    1.69 +        
    1.70 +        g_assert(FALSE && "iochannel-test failed");
    1.71 +        
    1.72 +        #if SYMBIAN
    1.73 +  		testResultXml("iochannel-test");
    1.74 +  		#endif /* EMULATOR */
    1.75 +        
    1.76 +        return 1;
    1.77 +      }
    1.78 +
    1.79 +    g_io_channel_set_encoding (gio_r, encoding, &gerr);
    1.80 +    if (gerr)
    1.81 +      {
    1.82 +        g_warning (gerr->message);
    1.83 +        g_error_free (gerr);
    1.84 +        
    1.85 +        g_assert(FALSE && "iochannel-test failed");
    1.86 +        
    1.87 +        #if SYMBIAN
    1.88 +  		testResultXml("iochannel-test");
    1.89 +  		#endif /* EMULATOR */
    1.90 +        
    1.91 +        return 1;
    1.92 +      }
    1.93 +    
    1.94 +    g_io_channel_set_buffer_size (gio_r, BUFFER_SIZE);
    1.95 +
    1.96 +    status = g_io_channel_set_flags (gio_r, G_IO_FLAG_NONBLOCK, &gerr);
    1.97 +    if (status == G_IO_STATUS_ERROR)
    1.98 +      {
    1.99 +        g_warning (gerr->message);
   1.100 +        g_assert(FALSE && "iochannel-test failed");
   1.101 +        g_error_free (gerr);
   1.102 +        gerr = NULL;
   1.103 +      }
   1.104 +    flags = g_io_channel_get_flags (gio_r);
   1.105 +    buffer = g_string_sized_new (BUFFER_SIZE);
   1.106 +
   1.107 +    while (TRUE)
   1.108 +    {
   1.109 +        do
   1.110 +          status = g_io_channel_read_line_string (gio_r, buffer, NULL, &gerr);
   1.111 +        while (status == G_IO_STATUS_AGAIN);
   1.112 +        if (status != G_IO_STATUS_NORMAL)
   1.113 +          break;
   1.114 +
   1.115 +        rlength += buffer->len;
   1.116 +
   1.117 +        do
   1.118 +          status = g_io_channel_write_chars (gio_w, buffer->str, buffer->len,
   1.119 +            &length_out, &gerr);
   1.120 +        while (status == G_IO_STATUS_AGAIN);
   1.121 +        if (status != G_IO_STATUS_NORMAL)
   1.122 +          break;
   1.123 +
   1.124 +        wlength += length_out;
   1.125 +
   1.126 +        if (length_out < buffer->len)
   1.127 +        {
   1.128 +        	g_warning ("Only wrote part of the line.");
   1.129 +        	g_assert(FALSE && "iochannel-test failed");
   1.130 +        }
   1.131 +          
   1.132 +
   1.133 +#ifdef VERBOSE
   1.134 +        g_print ("%s", buffer->str);
   1.135 +#endif
   1.136 +        g_string_truncate (buffer, 0);
   1.137 +    }
   1.138 +
   1.139 +    switch (status)
   1.140 +      {
   1.141 +        case G_IO_STATUS_EOF:
   1.142 +          break;
   1.143 +        case G_IO_STATUS_ERROR:
   1.144 +          g_warning (gerr->message);
   1.145 +          g_error_free (gerr);
   1.146 +          gerr = NULL;
   1.147 +          break;
   1.148 +        default:
   1.149 +          g_warning ("Abnormal exit from write loop.");
   1.150 +          g_assert(FALSE && "iochannel-test failed");
   1.151 +          break;
   1.152 +      }
   1.153 +
   1.154 +    do
   1.155 +      status = g_io_channel_flush (gio_w, &gerr);
   1.156 +    while (status == G_IO_STATUS_AGAIN);
   1.157 +
   1.158 +    if (status == G_IO_STATUS_ERROR)
   1.159 +      {
   1.160 +        g_warning (gerr->message);
   1.161 +        g_assert(FALSE && "iochannel-test failed");
   1.162 +        g_error_free (gerr);
   1.163 +        gerr = NULL;
   1.164 +      }
   1.165 +
   1.166 +#ifdef VERBOSE
   1.167 +    g_print ("read %d bytes, wrote %ld bytes\n", rlength, wlength);
   1.168 +#endif
   1.169 +
   1.170 +    g_io_channel_unref(gio_r);
   1.171 +    g_io_channel_unref(gio_w);
   1.172 +    
   1.173 +   	#if SYMBIAN
   1.174 +  	testResultXml("iochannel-test");
   1.175 +  	#endif /* EMULATOR */
   1.176 +  	    
   1.177 +    return 0;
   1.178 +}