#define READLINE_VALID_CHAR(C) (((u8)(C) >= 0x20 && (u8)(C) < 0x7F) || (C) == '\n') StringView read_line(FILE *fd, char delimiter) { #define RL_BUF_SIZE KB(64) static char readline_buf[RL_BUF_SIZE]; // Clear buffer. for (size_t i = 0; i < RL_BUF_SIZE; i++) { readline_buf[i] = 0; } // Barebones readline implementation. size_t n = 0; char c; while ((c = getc(fd)) != delimiter) { if (c == '\b') { readline_buf[n] = '\0'; n--; } else if (READLINE_VALID_CHAR(c) && n < RL_BUF_SIZE) { readline_buf[n] = c; n++; } } return (StringView){.start = (char *)&readline_buf, .n = n}; }