[gnome-builder] heap: fix various -Wsign-compare warnings
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] heap: fix various -Wsign-compare warnings
- Date: Tue, 28 Feb 2017 21:14:44 +0000 (UTC)
commit a2b787375ed54892f1d406b6869f0fdbb0472563
Author: Christian Hergert <chergert redhat com>
Date: Tue Feb 28 13:12:52 2017 -0800
heap: fix various -Wsign-compare warnings
This improves the integer comparison checks by only allowing positive
values in a gssize (so > 0 and < G_MAXSSIZE). That way we can safely
show the structure as "gsize" to the public API, but maintain simpler
signed integer math in the implementation.
contrib/egg/egg-heap.c | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
---
diff --git a/contrib/egg/egg-heap.c b/contrib/egg/egg-heap.c
index f1ab4e9..29586fa 100644
--- a/contrib/egg/egg-heap.c
+++ b/contrib/egg/egg-heap.c
@@ -87,7 +87,7 @@ typedef struct _EggHeapReal EggHeapReal;
struct _EggHeapReal
{
gchar *data;
- gsize len;
+ gssize len;
volatile gint ref_count;
guint element_size;
gsize allocated_len;
@@ -205,7 +205,7 @@ static void
egg_heap_real_shrink (EggHeapReal *real)
{
g_assert (real);
- g_assert ((real->allocated_len / 2) >= real->len);
+ g_assert ((real->allocated_len / 2) >= (gsize)real->len);
real->allocated_len = MAX (MIN_HEAP_SIZE, real->allocated_len / 2);
real->data = g_realloc_n (real->data,
@@ -223,7 +223,7 @@ egg_heap_real_insert_val (EggHeapReal *real,
g_assert (real);
g_assert (data);
- if (G_UNLIKELY (real->len == real->allocated_len))
+ if (G_UNLIKELY ((gsize)real->len == real->allocated_len))
egg_heap_real_grow (real);
memcpy (real->data + (real->element_size * real->len),
@@ -255,6 +255,7 @@ egg_heap_insert_vals (EggHeap *heap,
g_return_if_fail (heap);
g_return_if_fail (data);
g_return_if_fail (len);
+ g_return_if_fail ((G_MAXSSIZE - len) > real->len);
for (i = 0; i < len; i++, ptr += real->element_size)
egg_heap_real_insert_val (real, ptr);
@@ -308,7 +309,7 @@ egg_heap_extract (EggHeap *heap,
}
}
- if ((real->len > MIN_HEAP_SIZE) && (real->allocated_len / 2) >= real->len)
+ if ((real->len > MIN_HEAP_SIZE) && (real->allocated_len / 2) >= (gsize)real->len)
egg_heap_real_shrink (real);
return TRUE;
@@ -320,15 +321,17 @@ egg_heap_extract_index (EggHeap *heap,
gpointer result)
{
EggHeapReal *real = (EggHeapReal *)heap;
- gint ipos;
- gint lpos;
- gint mpos;
- gint ppos;
- gint rpos;
+ gssize ipos;
+ gssize lpos;
+ gssize mpos;
+ gssize ppos;
+ gssize rpos;
g_return_val_if_fail (heap, FALSE);
+ g_return_val_if_fail (index_ < G_MAXSSIZE, FALSE);
+ g_return_val_if_fail (index_ < (gsize)real->len, FALSE);
- if (real->len == 0)
+ if (real->len <= 0)
return FALSE;
if (result)
@@ -336,7 +339,7 @@ egg_heap_extract_index (EggHeap *heap,
real->len--;
- if (real->len && index_ != real->len)
+ if (real->len > 0 && index_ != (gsize)real->len)
{
memcpy (heap_index (real, index_),
heap_index (real, real->len),
@@ -352,7 +355,7 @@ egg_heap_extract_index (EggHeap *heap,
ppos = heap_parent (ppos);
}
- if (ipos == index_)
+ if (ipos == (gssize)index_)
{
while (TRUE)
{
@@ -377,7 +380,7 @@ egg_heap_extract_index (EggHeap *heap,
}
}
- if ((real->len > MIN_HEAP_SIZE) && (real->allocated_len / 2) >= real->len)
+ if ((real->len > MIN_HEAP_SIZE) && (real->allocated_len / 2) >= (gsize)real->len)
egg_heap_real_shrink (real);
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]