diff --git a/src/protobuf.c b/src/protobuf.c index ca482d675ba588cf838ac5219607e3c5167ecc2c..f85f2c0dc0612e8d55990f49c00ba7ff0e500834 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