commit 6f8344794cfe03f7ef4dbe5ef30734b929a45aa1
Author: Witold Filipczyk <witekfl@poczta.onet.pl>
Date: Wed May 1 10:44:44 2024 +0200
Memory functions in style of curl
diff --git a/Makefile b/Makefile
index 3df7392..12b7ead 100644
--- a/Makefile
+++ b/Makefile
@@ -53,7 +53,7 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/inputstream.h
Is := include/parserutils/utils
I := /$(INCLUDEDIR)/parserutils/utils
-INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/buffer.h;$(Is)/stack.h;$(Is)/vector.h
+INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/buffer.h;$(Is)/memory.h;$(Is)/stack.h;$(Is)/vector.h
INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR)/pkgconfig:lib$(COMPONENT).pc.in
INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR):$(OUTPUT)
diff --git a/include/parserutils/parserutils.h b/include/parserutils/parserutils.h
index 8518f42..3cfbfaa 100644
--- a/include/parserutils/parserutils.h
+++ b/include/parserutils/parserutils.h
@@ -16,6 +16,7 @@ extern "C"
#include <parserutils/errors.h>
#include <parserutils/functypes.h>
#include <parserutils/types.h>
+#include <parserutils/utils/memory.h>
#ifdef __cplusplus
}
diff --git a/include/parserutils/utils/memory.h b/include/parserutils/utils/memory.h
new file mode 100644
index 0000000..de8ee36
--- /dev/null
+++ b/include/parserutils/utils/memory.h
@@ -0,0 +1,35 @@
+/*
+ * This file is part of LibParserUtils.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#ifndef parserutils_utils_memory_h_
+#define parserutils_utils_memory_h_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+
+#include <parserutils/errors.h>
+#include <parserutils/functypes.h>
+
+typedef void *(*parserutils_malloc_callback)(size_t size);
+typedef void *(*parserutils_realloc_callback)(void *ptr, size_t size);
+typedef void (*parserutils_free_callback)(void *ptr);
+
+extern parserutils_malloc_callback parserutils_malloc;
+extern parserutils_realloc_callback parserutils_realloc;
+extern parserutils_free_callback parserutils_free;
+
+parserutils_error parserutils_init_memory_funcs(parserutils_malloc_callback ma,
+ parserutils_realloc_callback re, parserutils_free_callback fr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/charset/aliases.c b/src/charset/aliases.c
index 328e56f..69e9574 100644
--- a/src/charset/aliases.c
+++ b/src/charset/aliases.c
@@ -14,6 +14,8 @@
#include <assert.h>
+#include "utils/memory.h"
+
#include "charset/aliases.h"
#include "utils/utils.h"
diff --git a/src/charset/codec.c b/src/charset/codec.c
index 3267f1f..33f0225 100644
--- a/src/charset/codec.c
+++ b/src/charset/codec.c
@@ -7,6 +7,8 @@
#include <string.h>
+#include "utils/memory.h"
+
#include "charset/aliases.h"
#include "charset/codecs/codec_impl.h"
diff --git a/src/charset/codecs/codec_8859.c b/src/charset/codecs/codec_8859.c
index fb8fbd3..bc53ed2 100644
--- a/src/charset/codecs/codec_8859.c
+++ b/src/charset/codecs/codec_8859.c
@@ -11,6 +11,8 @@
#include <parserutils/charset/mibenum.h>
+#include "utils/memory.h"
+
#include "charset/codecs/codec_impl.h"
#include "utils/endian.h"
#include "utils/utils.h"
diff --git a/src/charset/codecs/codec_ascii.c b/src/charset/codecs/codec_ascii.c
index 45db8bb..9508dbc 100644
--- a/src/charset/codecs/codec_ascii.c
+++ b/src/charset/codecs/codec_ascii.c
@@ -13,6 +13,7 @@
#include "charset/codecs/codec_impl.h"
#include "utils/endian.h"
+#include "utils/memory.h"
#include "utils/utils.h"
/**
diff --git a/src/charset/codecs/codec_ext8.c b/src/charset/codecs/codec_ext8.c
index bc98549..d031dff 100644
--- a/src/charset/codecs/codec_ext8.c
+++ b/src/charset/codecs/codec_ext8.c
@@ -11,6 +11,8 @@
#include <parserutils/charset/mibenum.h>
+#include "utils/memory.h"
+
#include "charset/codecs/codec_impl.h"
#include "utils/endian.h"
#include "utils/utils.h"
diff --git a/src/charset/codecs/codec_utf16.c b/src/charset/codecs/codec_utf16.c
index 49b3492..1effb3d 100644
--- a/src/charset/codecs/codec_utf16.c
+++ b/src/charset/codecs/codec_utf16.c
@@ -12,6 +12,8 @@
#include <parserutils/charset/mibenum.h>
#include <parserutils/charset/utf16.h>
+#include "utils/memory.h"
+
#include "charset/codecs/codec_impl.h"
#include "utils/endian.h"
#include "utils/utils.h"
diff --git a/src/charset/codecs/codec_utf8.c b/src/charset/codecs/codec_utf8.c
index 6117fe6..8197d5e 100644
--- a/src/charset/codecs/codec_utf8.c
+++ b/src/charset/codecs/codec_utf8.c
@@ -11,6 +11,8 @@
#include <parserutils/charset/mibenum.h>
+#include "utils/memory.h"
+
#include "charset/codecs/codec_impl.h"
#include "charset/encodings/utf8impl.h"
#include "utils/endian.h"
diff --git a/src/charset/encodings/utf16.c b/src/charset/encodings/utf16.c
index 3611646..961b5e4 100644
--- a/src/charset/encodings/utf16.c
+++ b/src/charset/encodings/utf16.c
@@ -13,6 +13,8 @@
#include <stdlib.h>
#include <string.h>
+#include "utils/memory.h"
+
#include <parserutils/charset/utf16.h>
/**
diff --git a/src/charset/encodings/utf8.c b/src/charset/encodings/utf8.c
index 7d8ca6a..c984bec 100644
--- a/src/charset/encodings/utf8.c
+++ b/src/charset/encodings/utf8.c
@@ -14,6 +14,9 @@
#include <string.h>
#include <parserutils/charset/utf8.h>
+
+#include "utils/memory.h"
+
#include "charset/encodings/utf8impl.h"
/** Number of continuation bytes for a given start byte */
diff --git a/src/input/filter.c b/src/input/filter.c
index 00ee7eb..fabd836 100644
--- a/src/input/filter.c
+++ b/src/input/filter.c
@@ -17,6 +17,8 @@
#include <parserutils/charset/mibenum.h>
#include <parserutils/charset/codec.h>
+#include "utils/memory.h"
+
#include "input/filter.h"
#include "utils/utils.h"
diff --git a/src/input/inputstream.c b/src/input/inputstream.c
index 120ae88..7859fac 100644
--- a/src/input/inputstream.c
+++ b/src/input/inputstream.c
@@ -13,6 +13,8 @@
#include <parserutils/charset/utf8.h>
#include <parserutils/input/inputstream.h>
+#include "utils/memory.h"
+
#include "input/filter.h"
#include "utils/utils.h"
diff --git a/src/utils/Makefile b/src/utils/Makefile
index 26185fd..67919ae 100644
--- a/src/utils/Makefile
+++ b/src/utils/Makefile
@@ -1,4 +1,4 @@
# Sources
-DIR_SOURCES := buffer.c errors.c stack.c vector.c
+DIR_SOURCES := buffer.c errors.c memory.c stack.c vector.c
include $(NSBUILD)/Makefile.subdir
diff --git a/src/utils/buffer.c b/src/utils/buffer.c
index 4b68923..7e00751 100644
--- a/src/utils/buffer.c
+++ b/src/utils/buffer.c
@@ -10,6 +10,8 @@
#include <parserutils/utils/buffer.h>
+#include "memory.h"
+
#define DEFAULT_SIZE (4096)
/**
diff --git a/src/utils/errors.c b/src/utils/errors.c
index 248ae8c..a7fcb8f 100644
--- a/src/utils/errors.c
+++ b/src/utils/errors.c
@@ -9,6 +9,8 @@
#include <parserutils/errors.h>
+#include "memory.h"
+
/**
* Convert a parserutils error code to a string
*
diff --git a/src/utils/memory.c b/src/utils/memory.c
new file mode 100644
index 0000000..0b94220
--- /dev/null
+++ b/src/utils/memory.c
@@ -0,0 +1,30 @@
+/*
+ * This file is part of LibParserUtils.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <inttypes.h>
+#include <stdlib.h>
+
+#include <parserutils/utils/memory.h>
+
+parserutils_malloc_callback parserutils_malloc = malloc;
+parserutils_realloc_callback parserutils_realloc = realloc;
+parserutils_free_callback parserutils_free = free;
+
+#include "memory.h"
+
+parserutils_error parserutils_init_memory_funcs(parserutils_malloc_callback ma,
+ parserutils_realloc_callback re, parserutils_free_callback fr)
+{
+ if (!ma || !re || !fr) {
+ return PARSERUTILS_BADPARM;
+ }
+
+ parserutils_malloc = ma;
+ parserutils_realloc = re;
+ parserutils_free = fr;
+
+ return PARSERUTILS_OK;
+}
diff --git a/src/utils/memory.h b/src/utils/memory.h
new file mode 100644
index 0000000..f290ac0
--- /dev/null
+++ b/src/utils/memory.h
@@ -0,0 +1,19 @@
+/*
+ * This file is part of LibParserUtils.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#ifndef parserutils_memory_h_
+#define parserutils_memory_h_
+
+#include <parserutils/utils/memory.h>
+
+#undef malloc
+#define malloc(size) parserutils_malloc(size)
+#undef realloc
+#define realloc(ptr,size) parserutils_realloc(ptr, size)
+#undef free
+#define free(ptr) parserutils_free(ptr)
+
+#endif
diff --git a/src/utils/stack.c b/src/utils/stack.c
index 539ec9d..5e385ce 100644
--- a/src/utils/stack.c
+++ b/src/utils/stack.c
@@ -10,6 +10,8 @@
#include <parserutils/utils/stack.h>
+#include "memory.h"
+
/**
* Stack object
*/
diff --git a/src/utils/vector.c b/src/utils/vector.c
index 15c948b..be0c068 100644
--- a/src/utils/vector.c
+++ b/src/utils/vector.c
@@ -10,6 +10,8 @@
#include <parserutils/utils/vector.h>
+#include "memory.h"
+
/**
* Vector object
*/
Hello,
I want to add custom memory allocators like in other libraries.
This will help to debug possible memory leaks in programs.
First parserutils. It is based on curl.
Will you accept such patches?
Regards,
Witold Filipczyk
No comments:
Post a Comment