From 1d0ee825c8b70e9456bebc4bf2bc8366c2e89cbd Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 11 Oct 2021 12:16:28 +0200 Subject: Add a minimal read_line implementation --- src/bootstrap/read_line.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/bootstrap/read_line.c (limited to 'src/bootstrap/read_line.c') diff --git a/src/bootstrap/read_line.c b/src/bootstrap/read_line.c new file mode 100644 index 0000000..7612d05 --- /dev/null +++ b/src/bootstrap/read_line.c @@ -0,0 +1,32 @@ +#define RL_BUF_SIZE 1024 +static char readline_buf[RL_BUF_SIZE]; + +StringView +read_line(void) { + // 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 = getchar()) != '\n') { + if (c == '\b') { + readline_buf[n] = '\0'; + n--; + } else if (c == EOF || c == '\0') { + return (StringView){ .start = NULL, .n = 0 }; + } else if ((c >= ' ' && c <= '~') && n < RL_BUF_SIZE) { + readline_buf[n] = c; + n++; + } + } + + StringView sv = (StringView){ + .start = (char *)&readline_buf, + .n = n, + }; + return sv; +} + -- cgit v1.2.1