[glib: 2/25] Fixing signedness in glib/giochannel.c



commit 2f9e6e977a0c79da1ccc6c2ebcb302c1e1ae6fe5
Author: Emmanuel Fleury <emmanuel fleury u-bordeaux fr>
Date:   Thu Jan 31 18:43:59 2019 +0100

    Fixing signedness in glib/giochannel.c
    
    In file included from glib/glibconfig.h:9,
                     from glib/gtypes.h:32,
                     from glib/gquark.h:32,
                     from glib/gerror.h:28,
                     from glib/gconvert.h:32,
                     from glib/giochannel.h:32,
                     from glib/giochannel.c:37:
    glib/giochannel.c: In function ‘g_io_channel_write_chars’:
    glib/gmacros.h:351:26: error: comparison of integer expressions of different signedness: ‘gsize’ {aka 
‘long unsigned int’} and ‘gssize’ {aka ‘long int’} [-Werror=sign-compare]
     #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
                              ^
    glib/giochannel.c:2285:31: note: in expansion of macro ‘MIN’
               gssize write_this = MIN (space_in_buf, count - wrote_bytes);
                                   ^~~
    glib/gmacros.h:351:41: error: operand of ?: changes signedness from ‘gssize’ {aka ‘long int’} to ‘gsize’ 
{aka ‘long unsigned int’} due to unsignedness of other operand [-Werror=sign-compare]
     #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
                                             ^~~
    glib/giochannel.c:2285:31: note: in expansion of macro ‘MIN’
               gssize write_this = MIN (space_in_buf, count - wrote_bytes);
                                   ^~~
    glib/giochannel.c:2415:41: error: comparison of integer expressions of different signedness: ‘gssize’ 
{aka ‘long int’} and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
                             g_assert (count == from_buf_len - from_buf_old_len);
                                             ^~
    glib/gmacros.h:455:25: note: in definition of macro ‘G_LIKELY’
     #define G_LIKELY(expr) (expr)
                             ^~~~
    glib/giochannel.c:2415:25: note: in expansion of macro ‘g_assert’
                             g_assert (count == from_buf_len - from_buf_old_len);
                             ^~~~~~~~

 glib/giochannel.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)
---
diff --git a/glib/giochannel.c b/glib/giochannel.c
index 4fba3a5b0..1956e9dc6 100644
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -2180,6 +2180,7 @@ g_io_channel_write_chars (GIOChannel   *channel,
                          gsize        *bytes_written,
                           GError      **error)
 {
+  gsize count_unsigned;
   GIOStatus status;
   gssize wrote_bytes = 0;
 
@@ -2190,8 +2191,9 @@ g_io_channel_write_chars (GIOChannel   *channel,
 
   if ((count < 0) && buf)
     count = strlen (buf);
-  
-  if (count == 0)
+  count_unsigned = count;
+
+  if (count_unsigned == 0)
     {
       if (bytes_written)
         *bytes_written = 0;
@@ -2199,7 +2201,7 @@ g_io_channel_write_chars (GIOChannel   *channel,
     }
 
   g_return_val_if_fail (buf != NULL, G_IO_STATUS_ERROR);
-  g_return_val_if_fail (count > 0, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (count_unsigned > 0, G_IO_STATUS_ERROR);
 
   /* Raw write case */
 
@@ -2210,7 +2212,8 @@ g_io_channel_write_chars (GIOChannel   *channel,
       g_assert (!channel->write_buf || channel->write_buf->len == 0);
       g_assert (channel->partial_write_buf[0] == '\0');
       
-      status = channel->funcs->io_write (channel, buf, count, &tmp_bytes, error);
+      status = channel->funcs->io_write (channel, buf, count_unsigned,
+                                         &tmp_bytes, error);
 
       if (bytes_written)
        *bytes_written = tmp_bytes;
@@ -2286,7 +2289,7 @@ g_io_channel_write_chars (GIOChannel   *channel,
 
       if (!channel->encoding)
         {
-          gssize write_this = MIN (space_in_buf, count - wrote_bytes);
+          gssize write_this = MIN (space_in_buf, count_unsigned - wrote_bytes);
 
           g_string_append_len (channel->write_buf, buf, write_this);
           buf += write_this;
@@ -2306,7 +2309,7 @@ g_io_channel_write_chars (GIOChannel   *channel,
               from_buf = channel->partial_write_buf;
               from_buf_old_len = strlen (channel->partial_write_buf);
               g_assert (from_buf_old_len > 0);
-              from_buf_len = MIN (6, from_buf_old_len + count);
+              from_buf_len = MIN (6, from_buf_old_len + count_unsigned);
 
               memcpy (channel->partial_write_buf + from_buf_old_len, buf,
                       from_buf_len - from_buf_old_len);
@@ -2314,7 +2317,7 @@ g_io_channel_write_chars (GIOChannel   *channel,
           else
             {
               from_buf = buf;
-              from_buf_len = count - wrote_bytes;
+              from_buf_len = count_unsigned - wrote_bytes;
               from_buf_old_len = 0;
             }
 
@@ -2404,7 +2407,7 @@ reconvert:
                         memcpy (channel->partial_write_buf, from_buf, left_len);
                         channel->partial_write_buf[left_len] = '\0';
                         if (bytes_written)
-                          *bytes_written = count;
+                          *bytes_written = count_unsigned;
                         return G_IO_STATUS_NORMAL;
                       }
 
@@ -2416,12 +2419,12 @@ reconvert:
                          * less than a full character
                          */
 
-                        g_assert (count == from_buf_len - from_buf_old_len);
+                        g_assert (count_unsigned == from_buf_len - from_buf_old_len);
 
                         channel->partial_write_buf[from_buf_len] = '\0';
 
                         if (bytes_written)
-                          *bytes_written = count;
+                          *bytes_written = count_unsigned;
 
                         return G_IO_STATUS_NORMAL;
                       }
@@ -2483,7 +2486,7 @@ reconvert:
     }
 
   if (bytes_written)
-    *bytes_written = count;
+    *bytes_written = count_unsigned;
 
   return G_IO_STATUS_NORMAL;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]