#include <stdlib.h>
#include <stdint.h>
#include <limits.h>
#include <errno.h>
#include "libc.h"

#define ALIGN 16

void* __expand_heap(size_t*);

static void* __simple_malloc(size_t n) {
  static char *cur, *end;
  static volatile int lock[2];
  size_t align = 1, pad;
  void* p;

  if (!n)
    n++;
  while (align < n && align < ALIGN)
    align += align;

  LOCK(lock);

  pad = -(uintptr_t)cur & align - 1;

  if (n <= SIZE_MAX / 2 + ALIGN)
    n += pad;

  if (n > end - cur) {
    size_t m = n;
    char* new = __expand_heap(&m);
    if (!new) {
      UNLOCK(lock);
      return 0;
    }
    if (new != end) {
      cur = new;
      n -= pad;
      pad = 0;
    }
    end = new + m;
  }

  p = cur + pad;
  cur += n;
  UNLOCK(lock);
  return p;
}

weak_alias(__simple_malloc, malloc);
weak_alias(__simple_malloc, __malloc0);
