#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

typedef uint8_t  u8;
typedef uint64_t u64;

// I don't know if this supports 64 bit printf so I did it myself
u64 ipow(u64 base, u64 exp){ // stolen from stackoverflow
	u64 result = 1;
	while(exp>0){
		if(exp & 1) result = (result * base);
		exp = (exp >> 1);
		base = (base * base);
	}
	return result;}

void print64(u64* number){
	const u8 charlut[]  = "0123456789ABCDEF";
	u8 i=19U;
	while(1){
		putchar(charlut[(*number / ipow(10,i)) % 10]);
		if(!i) break;
		i--;
	}}
//end horrible code

int main(void){
	u64 size = 1;
	u8* memoryblock = (u8*)0;
	while( realloc(memoryblock, size) ){
		printf("Allocated "); print64(&size); printf(" bytes...\n");
		size = (size << 1);
	}
	printf("Allocate  "); print64(&size); printf(" bytes failed\n");
	free(memoryblock);
	return 0;}