diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..93a1996 --- /dev/null +++ b/.clangd @@ -0,0 +1,13 @@ +If: + PathMatch: .*\.cpp + +CompileFlags: + Add: [-std=c++23] + +--- + +If: + PathMatch: .*\.c + +CompileFlags: + Add: [-std=c23] \ No newline at end of file diff --git a/build/assets/include/stdlib.h b/build/assets/include/stdlib.h index 9885a19..067c0a4 100644 --- a/build/assets/include/stdlib.h +++ b/build/assets/include/stdlib.h @@ -16,11 +16,12 @@ extern unsigned char __heap_base; #define IMPORT(name) __attribute__((import_module("env"), import_name(#name))) #define EXPORT(name) __attribute__((export_name(#name))) -void* malloc(size_t); -void free(void*); -void* realloc(void*, size_t); +void* malloc(size_t size); +void* calloc(size_t n, size_t size); +void* realloc(void* ptr, size_t size); +void free(void* ptr); -void* memset(void* d, uint8_t c, size_t n); +void* memset(void* dest, uint8_t ch, size_t n); void* memcpy(void* dest, const void* src, size_t n); int memcmp(const void* s1, const void* s2, size_t n); diff --git a/build/assets/lib/stdlib.c b/build/assets/lib/stdlib.c index 7f69701..c6c4363 100644 --- a/build/assets/lib/stdlib.c +++ b/build/assets/lib/stdlib.c @@ -139,6 +139,20 @@ void* realloc(void* block, size_t size) { return ret; } +void* calloc(size_t n, size_t size) { + const size_t s = n * size; + if (s == 0) { + return NULL; + } + + void* ret = malloc(n * size); + if (ret) { + memset(ret, 0, n * size); + } + + return ret; +} + void* memset(void* d, uint8_t c, size_t n) { uint8_t* p = (uint8_t*)d; while (n--) { diff --git a/compile_flags.txt b/compile_flags.txt index 4d9cfa8..e15216f 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -1,5 +1,4 @@ --target=wasm32 --std=gnu++23 -fno-builtin --no-standard-libraries -I