void *fb_alloc_all(uint32_t *size) { int32_t temp = pointer - ((char *) FB_PIXELS()) - sizeof(uint32_t); if (temp < sizeof(uint32_t)) { *size = 0; return NULL; } *size = (temp / sizeof(uint32_t)) * sizeof(uint32_t); // Round Down char *result = pointer - *size; char *new_pointer = result - sizeof(uint32_t); *((uint32_t *) new_pointer) = *size + sizeof(uint32_t); // Save size. pointer = new_pointer; return result; }
// returns null pointer without error if size==0 void *fb_alloc(uint32_t size) { if (!size) { return NULL; } size=((size+sizeof(uint32_t)-1)/sizeof(uint32_t))*sizeof(uint32_t);// Round Up char *result = pointer - size; char *new_pointer = result - sizeof(uint32_t); // Check if allocation overwrites the framebuffer pixels if (new_pointer < (char *) FB_PIXELS()) { fb_alloc_fail(); } *((uint32_t *) new_pointer) = size + sizeof(uint32_t); // Save size. pointer = new_pointer; return result; }
uint32_t fb_avail() { int32_t temp = pointer - ((char *) FB_PIXELS()) - sizeof(uint32_t); return (temp < sizeof(uint32_t)) ? 0 : temp; }