Skip to content

Commit

Permalink
Missing files.
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasff committed Nov 23, 2010
1 parent 46f08e8 commit fffb760
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
67 changes: 67 additions & 0 deletions src/mem.c
@@ -0,0 +1,67 @@
#include "mem.h"

#include <stdlib.h>
#include <string.h>

size_t max_memory = 0;
static size_t cur_memory = 0;

#define HEADER_SIZE (sizeof(size_t))

void *
rmalloc(size_t size) {

void *ptr;

if(max_memory && cur_memory > max_memory) {
return NULL;
}

cur_memory += size;
ptr = malloc(size + HEADER_SIZE);
memcpy(ptr, &size, HEADER_SIZE);
return ptr + HEADER_SIZE;
}

void *
rcalloc(size_t nmemb, size_t size) {

void *ptr;
size_t total = nmemb * size;

if(max_memory && cur_memory > max_memory) {
return NULL;
}

cur_memory += total;
ptr = calloc(1, total + HEADER_SIZE);
memcpy(ptr, &total, HEADER_SIZE);
return ptr + HEADER_SIZE;
}

char *
rstrdup(const char *s) {

char *ret;
size_t sz = strlen(s);

ret = rcalloc(sz + 1, 1);
memcpy(ret, s, sz);

return ret;
}

void
rfree(void *ptr) {

size_t sz;
if(!ptr) {
return;
}

memcpy(&sz, ptr - HEADER_SIZE, HEADER_SIZE);
cur_memory -= sz;

free(ptr-HEADER_SIZE);
}

20 changes: 20 additions & 0 deletions src/mem.h
@@ -0,0 +1,20 @@
#ifndef MEM_H
#define MEM_H

#include <stdlib.h>

extern size_t max_memory;

void *
rmalloc(size_t size);

void *
rcalloc(size_t nmemb, size_t size);

char *
rstrdup(const char *s);

void
rfree(void *ptr);

#endif

0 comments on commit fffb760

Please sign in to comment.