Add mem.c and "mem.h" with emalloc() etc.

This commit is contained in:
Andrew Bettison 2012-12-04 09:56:24 +10:30
parent f995a2a42d
commit 5139d8d34d
7 changed files with 44 additions and 39 deletions

View File

@ -20,6 +20,7 @@ SRCS= $(NACL_SOURCES) $(SERVAL_SOURCES)
MONITORCLIENTSRCS=conf.c \
log.c \
mkdir.c \
mem.c \
monitor-client.c \
net.c \
str.c \
@ -29,6 +30,7 @@ MONITORCLIENTSRCS=conf.c \
MDPCLIENTSRCS=conf.c \
dataformats.c \
mkdir.c \
mem.c \
log.c \
mdp_client.c \
net.c \

View File

@ -6,6 +6,7 @@ HDRS= fifo.h \
rhizome.h \
serval.h \
str.h \
mem.h \
strbuf.h \
strbuf_helpers.h \
sha2.h \

27
mem.c
View File

@ -52,3 +52,30 @@ char *_str_edup(struct __sourceloc __whence, const char *str)
{
return _strn_edup(__whence, str, strlen(str));
}
#undef malloc
#undef calloc
#undef free
#undef realloc
#define SDM_GUARD_AFTER 16384
void *_serval_debug_malloc(unsigned int bytes, struct __sourceloc __whence)
{
void *r=malloc(bytes+SDM_GUARD_AFTER);
DEBUGF("malloc(%d) -> %p", bytes, r);
return r;
}
void *_serval_debug_calloc(unsigned int bytes, unsigned int count, struct __sourceloc __whence)
{
void *r=calloc((bytes*count)+SDM_GUARD_AFTER,1);
DEBUGF("calloc(%d,%d) -> %p", bytes, count, r);
return r;
}
void _serval_debug_free(void *p, struct __sourceloc __whence)
{
free(p);
DEBUGF("free(%p)", p);
}

11
mem.h
View File

@ -23,6 +23,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <sys/types.h>
#include "log.h"
// #define MALLOC_PARANOIA
#ifdef MALLOC_PARANOIA
#define malloc(X) _serval_debug_malloc(X,__WHENCE__)
#define calloc(X,Y) _serval_debug_calloc(X,Y,__WHENCE__)
#define free(X) _serval_debug_free(X,__WHENCE__)
void *_serval_debug_malloc(unsigned int bytes, struct __sourceloc whence);
void *_serval_debug_calloc(unsigned int bytes, unsigned int count, struct __sourceloc whence);
void _serval_debug_free(void *p, struct __sourceloc whence);
#endif
/* Equivalent to malloc(3), but logs an error before returning NULL.
*
* @author Andrew Bettison <andrew@servalproject.com>

View File

@ -17,6 +17,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "mem.h"
#include "serval.h"
#include "overlay_buffer.h"
@ -453,29 +454,3 @@ int ob_dump(struct overlay_buffer *b,char *desc)
dump(NULL, b->bytes, b->position);
return 0;
}
#undef malloc
#undef calloc
#undef free
#undef realloc
#define SDM_GUARD_AFTER 16384
void *_serval_debug_malloc(unsigned int bytes, struct __sourceloc __whence)
{
void *r=malloc(bytes+SDM_GUARD_AFTER);
DEBUGF("malloc(%d) -> %p", bytes, r);
return r;
}
void *_serval_debug_calloc(unsigned int bytes, unsigned int count, struct __sourceloc __whence)
{
void *r=calloc((bytes*count)+SDM_GUARD_AFTER,1);
DEBUGF("calloc(%d,%d) -> %p", bytes, count, r);
return r;
}
void _serval_debug_free(void *p, struct __sourceloc __whence)
{
free(p);
DEBUGF("free(%p)", p);
}

View File

@ -21,8 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#ifndef __SERVALD_SERVALD_H
#define __SERVALD_SERVALD_H
// #define MALLOC_PARANOIA
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
@ -112,6 +110,7 @@ struct in_addr {
#include <sys/stat.h>
#include "constants.h"
#include "mem.h"
#include "xprintf.h"
#include "log.h"
#include "net.h"
@ -623,17 +622,6 @@ int dump_payload(struct overlay_frame *p, char *message);
int urandombytes(unsigned char *x,unsigned long long xlen);
#ifdef MALLOC_PARANOIA
#define malloc(X) _serval_debug_malloc(X,__WHENCE__)
#define calloc(X,Y) _serval_debug_calloc(X,Y,__WHENCE__)
#define free(X) _serval_debug_free(X,__WHENCE__)
void *_serval_debug_malloc(unsigned int bytes, struct __sourceloc whence);
void *_serval_debug_calloc(unsigned int bytes, unsigned int count, struct __sourceloc whence);
void _serval_debug_free(void *p, struct __sourceloc whence);
#endif
struct vomp_call_state;
void set_codec_flag(int codec, unsigned char *flags);

View File

@ -17,6 +17,7 @@ SERVAL_SOURCES = $(SERVAL_BASE)audiodevices.c \
$(SERVAL_BASE)main.c \
$(SERVAL_BASE)mdp_client.c \
$(SERVAL_BASE)mkdir.c \
$(SERVAL_BASE)mem.c \
$(SERVAL_BASE)monitor.c \
$(SERVAL_BASE)monitor-client.c \
$(SERVAL_BASE)monitor-cli.c \