From 0ecc9de95f51f4092f3f4a4ce477c322df3ee9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ture=20P=C3=A5lsson?= <ture@lysator.liu.se> Date: Fri, 5 Dec 2014 10:47:57 +0100 Subject: [PATCH] Clean up handling of arrays --- src/protobuf.c | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/protobuf.c b/src/protobuf.c index ca482d6..f85f2c0 100644 --- a/src/protobuf.c +++ b/src/protobuf.c @@ -252,10 +252,8 @@ static void init_uint32_packed (readosm_uint32_packed * packed) { /* initialing an empty PBF uint32 packed object */ - packed->max = 128; - packed->values = malloc(packed->max * sizeof(unsigned int)); - packed->next = packed->values; - packed->count = 0; + packed->max = packed->count = 0; + packed->values = packed->next = NULL; } static void @@ -263,7 +261,7 @@ append_uint32_packed (readosm_uint32_packed * packed, unsigned int val) { /* appending an uint32 value to a PBF packed object */ if (packed->count == packed->max) { - packed->max *= 2; + packed->max = (packed->max == 0) ? 256 : 2 * packed->max; packed->values = realloc(packed->values, packed->max * sizeof(unsigned int)); packed->next = packed->values + packed->count; } @@ -280,8 +278,7 @@ static void finalize_uint32_packed (readosm_uint32_packed * packed) { /* cleaning any memory allocation for an uint32 packed object */ - if (packed->values) - free (packed->values); + if (packed->values) free (packed->values); packed->values = packed->next = NULL; packed->max = packed->count = 0; } @@ -290,17 +287,16 @@ static void reset_uint32_packed (readosm_uint32_packed * packed) { /* resetting an uint32 packed object to empty initial state */ - finalize_uint32_packed (packed); + packed->next = packed->values; + packed->count = 0; } static void init_int32_packed (readosm_int32_packed * packed) { /* initialing an empty PBF int32 packed object */ - packed->max = 256; - packed->values = malloc(packed->max * sizeof(int)); - packed->count = 0; - packed->next = packed->values; + packed->max = packed->count = 0; + packed->values = packed->next = NULL; } static void @@ -308,7 +304,7 @@ append_int32_packed (readosm_int32_packed * packed, int val) { /* appending an int32 value to a PBF packed object */ if (packed->count == packed->max) { - packed->max *= 2; + packed->max = (packed->max == 0) ? 256 : 2 * packed->max; packed->values = realloc(packed->values, packed->max * sizeof(int)); packed->next = packed->values + packed->count; } @@ -320,8 +316,7 @@ static void finalize_int32_packed (readosm_int32_packed * packed) { /* cleaning any memory allocation for an int32 packed object */ - if (packed->values) - free (packed->values); + if (packed->values) free (packed->values); packed->values = packed->next = NULL; packed->max = packed->count = 0; } @@ -330,17 +325,16 @@ static void reset_int32_packed (readosm_int32_packed * packed) { /* resetting an int32 packed object to empty initial state */ - finalize_int32_packed (packed); + packed->next = packed->values; + packed->count = 0; } static void init_int64_packed (readosm_int64_packed * packed) { /* initialing an empty PBF int64 packed object */ - packed->max = 128; - packed->values = malloc(packed->max * sizeof(long long)); - packed->next = packed->values; - packed->count = 0; + packed->max = packed->count = 0; + packed->values = packed->next = NULL; } static void @@ -348,7 +342,7 @@ append_int64_packed (readosm_int64_packed * packed, long long val) { /* appending an int64 value to a PBF packed object */ if (packed->count == packed->max) { - packed->max *= 2; + packed->max = (packed->max == 0) ? 256 : 2 * packed->max; packed->values = realloc(packed->values, packed->max * sizeof(long long)); packed->next = packed->values + packed->count; } @@ -365,8 +359,7 @@ static void finalize_int64_packed (readosm_int64_packed * packed) { /* cleaning any memory allocation for an int64 packed object */ - if (packed->values) - free (packed->values); + if (packed->values) free (packed->values); packed->values = packed->next = NULL; packed->count = 0; packed->max = 0; @@ -376,7 +369,8 @@ static void reset_int64_packed (readosm_int64_packed * packed) { /* resetting an int64 packed object to empty initial state */ - finalize_int64_packed (packed); + packed->next = packed->values; + packed->count = 0; } static void -- GitLab