From 488ecb923204b728ffb82736a70e5cbcc6083ca3 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Wed, 10 Dec 2014 05:49:09 -0500 Subject: [PATCH] Livin la vida swag --- yolomalloc.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 yolomalloc.c diff --git a/yolomalloc.c b/yolomalloc.c new file mode 100644 index 0000000..838636e --- /dev/null +++ b/yolomalloc.c @@ -0,0 +1,61 @@ +/*======================* +%$ /!\ yolomalloc.c /!\ $% +%$ DANGER Swag overflow $% + *======================*/ + +/* Feature test macros */ +#define _DEFAULT_SOURCE /* for sbrk */ + +/* Includes */ + +#include +#include + +#include "yolomalloc.h" + +/* Defines */ + +#define YOLO_WORD (sizeof(long)) +#define YOLO_DWORD (2 * sizeof(long)) +#define YOLO_CHUNK 8192 + +/* Globals */ + +void *yolo_start = NULL; +void *yolo_end = NULL; + +int yolo_init() { + yolo_start = sbrk(0); + if (yolo_start == (void*) -1) { + yolo_start = NULL; + yolo_end = NULL; + return -1; + } + yolo_end = yolo_start; + return 0; +} + +/* Ya know, allocating stuff and all */ +void *yolomalloc(size_t size) { + if (size == 0) { + return NULL; + } + if (yolo_start == NULL || yolo_end == NULL) { + if (yolo_init() != 0) { + return NULL; + } + } + int size_w = (size + (YOLO_WORD-1)) / YOLO_WORD; // size in words + int align_dw = ((size_w + 1) / 2) * 2; // round size_w to dword + void *ptr = sbrk(align_dw); + if (ptr == (void*) -1) { + return NULL; + } + return ptr; +} + +void yolofree(void *ptr) { + /*----------------------------------* + * THE YOLO IS STRONG WITH THIS ONE * + *----------------------------------*/ +}