#include "stdlib.h" #ifdef KINC_WASM __attribute__((import_module("imports"), import_name("js_fprintf"))) void js_fprintf(const char *format); #define HEAP_SIZE 1024 * 1024 * 8 static unsigned char heap[HEAP_SIZE]; static size_t heap_top = 4; #endif #ifdef KINC_WASM __attribute__((export_name("malloc"))) #endif void *malloc(size_t size) { #ifdef KINC_WASM // Align to 4 bytes to make js typed arrays work if (size % 4 != 0) { size += 4 - size % 4; } size_t old_top = heap_top; heap_top += size; if (heap_top >= HEAP_SIZE) { js_fprintf("malloc: out of memory"); } return &heap[old_top]; #endif return NULL; } void *alloca(size_t size) { return NULL; } void *realloc(void *mem, size_t size) { return NULL; } void free(void *mem) { } void *memset(void *ptr, int value, size_t num) { unsigned char *data = (unsigned char *)ptr; for (size_t i = 0; i < num; ++i) { data[i] = (unsigned char)value; } return ptr; } void *memcpy(void *destination, const void *source, size_t num) { unsigned char *s = (unsigned char *)source; unsigned char *d = (unsigned char *)destination; for (size_t i = 0; i < num; ++i) { d[i] = s[i]; } return destination; } int memcmp(const void *ptr1, const void *ptr2, size_t num) { unsigned char *p1 = (unsigned char *)ptr1; unsigned char *p2 = (unsigned char *)ptr2; for (size_t i = 0; i < num; ++i) { if (p1[i] != p2[i]) { return (int)p1[i] - (int)p2[i]; } } return 0; }