* 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 */
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)
/* 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");
size_t count = *(size_t*)iter.pSize;
while (count--)
{
- free(*pItem);
+ pb_free(*pItem);
*pItem++ = NULL;
}
}
}
/* Release main item */
- free(*(void**)iter.pData);
+ pb_free(*(void**)iter.pData);
*(void**)iter.pData = NULL;
}
} while (pb_field_next(&iter));