forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
68
Kha/Kinc/miniClib/memory.c
Normal file
68
Kha/Kinc/miniClib/memory.c
Normal file
@ -0,0 +1,68 @@
|
||||
#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;
|
||||
}
|
Reference in New Issue
Block a user