| @ -0,0 +1,61 @@ | |||||
| /*======================* | |||||
| %$ /!\ yolomalloc.c /!\ $% | |||||
| %$ DANGER Swag overflow $% | |||||
| *======================*/ | |||||
| /* Feature test macros */ | |||||
| #define _DEFAULT_SOURCE /* for sbrk */ | |||||
| /* Includes */ | |||||
| #include <unistd.h> | |||||
| #include <stdio.h> | |||||
| #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 * | |||||
| *----------------------------------*/ | |||||
| } | |||||