From: Petteri Aimonen Date: Mon, 17 Mar 2014 15:25:58 +0000 (+0200) Subject: More configuration options for dynamic alloc X-Git-Tag: 3.99.1~14^2~250 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=607cb998b5472ef1df461995b33694e9a54bef23;p=apps%2Flow-level-can-service.git More configuration options for dynamic alloc --- diff --git a/pb.h b/pb.h index d6cb1d4..6f84385 100644 --- a/pb.h +++ b/pb.h @@ -10,6 +10,9 @@ * uncommenting the lines, or on the compiler command line. * *****************************************************************/ +/* Enable support for dynamically allocated fields */ +/* #define PB_ENABLE_MALLOC 1 */ + /* Define this if your CPU architecture is big endian, i.e. it * stores the most-significant byte first. */ /* #define __BIG_ENDIAN__ 1 */ @@ -340,6 +343,17 @@ struct _pb_extension_t { pb_extension_t *next; }; +/* Memory allocation functions to use. You can define pb_realloc and + * pb_free to custom functions if you want. */ +#ifdef PB_ENABLE_MALLOC +# ifndef pb_realloc +# define pb_realloc(ptr, size) realloc(ptr, size) +# endif +# ifndef pb_free +# define pb_free(ptr) free(ptr) +# endif +#endif + /* These macros are used to declare pb_field_t's in the constant array. */ /* Size of a structure member, in bytes. */ #define pb_membersize(st, m) (sizeof ((st*)0)->m) diff --git a/pb_decode.c b/pb_decode.c index 7938d70..9a2abd6 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -480,7 +480,7 @@ static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t /* Allocate new or expand previous allocation */ /* Note: on failure the old pointer will remain in the structure, * the message must be freed by caller also on error return. */ - ptr = realloc(ptr, size); + ptr = pb_realloc(ptr, size); if (ptr == NULL) PB_RETURN_ERROR(stream, "realloc failed"); @@ -945,7 +945,7 @@ void pb_release(const pb_field_t fields[], void *dest_struct) size_t count = *(size_t*)iter.pSize; while (count--) { - free(*pItem); + pb_free(*pItem); *pItem++ = NULL; } } @@ -968,7 +968,7 @@ void pb_release(const pb_field_t fields[], void *dest_struct) } /* Release main item */ - free(*(void**)iter.pData); + pb_free(*(void**)iter.pData); *(void**)iter.pData = NULL; } } while (pb_field_next(&iter));