summaryrefslogtreecommitdiff
path: root/lib/gnutls_mem.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2002-05-22 19:29:37 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2002-05-22 19:29:37 +0000
commita5c46d2bda51cec16ede2fa50a82c6fac0c0d0be (patch)
tree78029cd3f3a3eb324a1b7429660cb2bdfa76381d /lib/gnutls_mem.c
parent2e6a260117b619d308a723fb4a9d652cea267e3b (diff)
downloadgnutls-a5c46d2bda51cec16ede2fa50a82c6fac0c0d0be.tar.gz
Applied Jeff Johnson's patch which fixes type problems in 64 bit machines. Removed the default allocation handlers, and made the libc's functions to be defaults. Added function which sets the memory allocation functions to be used.
Diffstat (limited to 'lib/gnutls_mem.c')
-rw-r--r--lib/gnutls_mem.c168
1 files changed, 6 insertions, 162 deletions
diff --git a/lib/gnutls_mem.c b/lib/gnutls_mem.c
index 91961dedd9..bcb1c26675 100644
--- a/lib/gnutls_mem.c
+++ b/lib/gnutls_mem.c
@@ -23,47 +23,15 @@
#include <gnutls_errors.h>
#include <gnutls_num.h>
-#ifdef USE_LIBCALLOC
+void* (*gnutls_secure_malloc)(size_t) = malloc;
+void* (*gnutls_malloc)(size_t) = malloc;
+void (*gnutls_free)(void*) = free;
-int _gnutls_is_secure_memory(const void *ign)
-{
- return 0;
-}
-
-#else
-
-/* #define MALLOC_DEBUG */
-# define EXTRA_SIZE sizeof(size_t)+1
-
-int _gnutls_is_secure_memory(const svoid * mem)
-{
- if (mem==NULL) return 0;
- return *((opaque *) mem - 1);
-}
+int _gnutls_is_secure_mem_null( const void* ign) { return 0; }
-void *gnutls_malloc(size_t size)
-{
- opaque *ret;
- if (size == 0)
- return NULL;
+int (*_gnutls_is_secure_memory)(const void*) = _gnutls_is_secure_mem_null;
+void* (*gnutls_realloc)(void*, size_t) = realloc;
- ret = malloc(size + EXTRA_SIZE);
- if (ret == NULL)
- return ret;
-
- *((int *) ret) = size;
- ret[sizeof(size_t)] = 0; /* not secure */
-
- ret += EXTRA_SIZE;
-
-#ifdef MALLOC_DEBUG
- _gnutls_log("Allocated: %x with %d bytes\n", ret,
- _gnutls_malloc_ptr_size(ret));
-#endif
-
- return ret;
-
-}
void *gnutls_calloc(size_t nmemb, size_t size)
{
@@ -77,93 +45,6 @@ void *gnutls_calloc(size_t nmemb, size_t size)
return ret;
}
-size_t _gnutls_malloc_ptr_size(void *_ptr)
-{
- opaque *ptr = _ptr;
-
- if (_ptr == NULL)
- return 0;
-
- return *((int *) ((opaque *) ptr - sizeof(size_t) - 1));
-}
-
-void *gnutls_realloc(void *_ptr, size_t size)
-{
- opaque *ret;
- opaque* ptr = _ptr;
-
- if (ptr!=NULL)
- ptr -= EXTRA_SIZE;
-
- ret = realloc(ptr, size + EXTRA_SIZE);
- if (ret == NULL)
- return ret;
-
- *((int *) ret) = size;
- ret[sizeof(size_t)] = 0; /* not secure */
-
- ret += EXTRA_SIZE;
-
- return ret;
-}
-
-/* This realloc only returns a new pointer if you
- * request more data than the data into the pointer.
- */
-void *gnutls_realloc_fast(void *ptr, size_t size)
-{
-
- if (ptr != NULL && size <= _gnutls_malloc_ptr_size(ptr)) {
- /* do nothing, just return the pointer.
- * It's much faster.
- */
- return ptr;
- }
- return gnutls_realloc(ptr, size);
-}
-
-inline
-static void _gnutls_free(void *_ptr)
-{
-opaque *ptr = _ptr;
-
-
- ptr -= EXTRA_SIZE;
-
-#ifdef MALLOC_DEBUG
- _gnutls_log("Freed: %x with %d bytes\n", _ptr,
- _gnutls_malloc_ptr_size(_ptr));
-#endif
- free(ptr);
-}
-
-void gnutls_free(void *_ptr)
-{
- if (_ptr == NULL)
- return;
-
- if ( _gnutls_is_secure_memory( _ptr) != 0) {
- return gnutls_secure_free( _ptr);
- } else {
- _gnutls_free( _ptr);
- }
-}
-
-
-
-svoid *gnutls_secure_malloc(size_t size)
-{
- opaque *ret;
- ret = gnutls_malloc(size);
- if (ret == NULL)
- return ret;
-
- *((opaque *) ret - 1) = 1; /* secure mem */
-
- return ret;
-
-}
-
svoid *gnutls_secure_calloc(size_t nmemb, size_t size)
{
svoid *ret;
@@ -176,42 +57,6 @@ svoid *gnutls_secure_calloc(size_t nmemb, size_t size)
return ret;
}
-size_t _gnutls_secure_ptr_size(svoid * ptr)
-{
- return _gnutls_malloc_ptr_size(ptr);
-}
-
-svoid *gnutls_secure_realloc(svoid * ptr, size_t size)
-{
- svoid *ret;
- if (ptr != NULL && size <= _gnutls_secure_ptr_size(ptr)) {
- /* do not do realloc.
- * return the previous pointer.
- */
- return ptr;
- }
- ret = gnutls_secure_malloc(size);
- if (ret == NULL)
- return ret;
-
- if (ptr != NULL) {
- memcpy(ret, ptr, GMIN(_gnutls_secure_ptr_size(ptr), size));
- gnutls_secure_free(ptr);
- }
-
- return ret;
-}
-
-void gnutls_secure_free(svoid * ptr)
-{
-opaque* _ptr = ptr;
-
- memset(ptr, 0, _gnutls_secure_ptr_size(ptr));
- *((opaque *) _ptr - 1) = 0; /* not secure mem */
-
- _gnutls_free(ptr);
-}
-
char *gnutls_strdup(const char *s)
{
int size = strlen(s);
@@ -225,5 +70,4 @@ char *gnutls_strdup(const char *s)
return ret;
}
-#endif /* USE_LIBCALLOC */