[READ-ONLY] Mirror of https://github.com/bombshell-dev/tty. Platform independent 2D layout engine for terminal applications based on Clay
5

Configure Feed

Select the types of activity you want to include in your feed.

🧱 extract mem.c/h shims for memcpy/memset

Use explicit byte-loop implementations instead of __builtin_mem*
to avoid infinite recursion when clang lowers builtins back to
libc calls on some versions.

Charles Lowell (Mar 16, 2026, 7:00 PM -0500) 455fdb63 9fd96bdf

+35 -10
+1
.clang-format
··· 1 1 BasedOnStyle: LLVM 2 + SortIncludes: Never
+1 -8
src/buffer.c
··· 1 1 /* buffer.c — fixed-capacity byte buffer */ 2 2 3 3 #include "buffer.h" 4 + #include "mem.h" 4 5 #include "utf8.h" 5 - 6 - typedef __SIZE_TYPE__ size_t; 7 - 8 - void *memcpy(void *dst, const void *src, size_t n) { 9 - return __builtin_memcpy(dst, src, n); 10 - } 11 - 12 - void *memset(void *dst, int c, size_t n) { return __builtin_memset(dst, c, n); } 13 6 14 7 static size_t strlen(const char *s) { 15 8 size_t n = 0;
+2 -1
src/clayterm.c
··· 13 13 #include "../clay/clay.h" 14 14 #include "buffer.h" 15 15 #include "cell.h" 16 + #include "mem.h" 16 17 #include "utf8.h" 17 18 #include "wcwidth.h" 18 19 ··· 290 291 static float rdf(uint32_t *buf, int len, int *i) { 291 292 uint32_t v = rd(buf, len, i); 292 293 float f; 293 - __builtin_memcpy(&f, &v, 4); 294 + memcpy(&f, &v, 4); 294 295 return f; 295 296 } 296 297
+18
src/mem.c
··· 1 + /* mem.c — memcpy/memset shims for freestanding wasm32 */ 2 + 3 + #include "mem.h" 4 + 5 + void *memcpy(void *dst, const void *src, size_t n) { 6 + unsigned char *d = (unsigned char *)dst; 7 + const unsigned char *s = (const unsigned char *)src; 8 + while (n--) 9 + *d++ = *s++; 10 + return dst; 11 + } 12 + 13 + void *memset(void *dst, int c, size_t n) { 14 + unsigned char *d = (unsigned char *)dst; 15 + while (n--) 16 + *d++ = (unsigned char)c; 17 + return dst; 18 + }
+11
src/mem.h
··· 1 + /* mem.h — memcpy/memset shims for freestanding wasm32 */ 2 + 3 + #ifndef MEM_H 4 + #define MEM_H 5 + 6 + typedef __SIZE_TYPE__ size_t; 7 + 8 + void *memcpy(void *dst, const void *src, size_t n); 9 + void *memset(void *dst, int c, size_t n); 10 + 11 + #endif
+2 -1
src/module.c
··· 2 2 3 3 #include "../clay/clay.h" 4 4 5 + #include "mem.c" 5 6 #include "buffer.c" 6 7 #include "cell.c" 7 - #include "clayterm.c" 8 8 #include "utf8.c" 9 9 #include "wcwidth.c" 10 + #include "clayterm.c"