From 381460e92edb4bc321c069f430e536d8d521cdfb Mon Sep 17 00:00:00 2001 From: dzaima Date: Sun, 8 Jan 2023 20:35:20 +0200 Subject: [PATCH] windows: getline fixes & discard trailing CRLF --- src/main.c | 1 + src/windows/getline.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index a77bc859..c7e6b11f 100644 --- a/src/main.c +++ b/src/main.c @@ -908,6 +908,7 @@ int main(int argc, char* argv[]) { i64 read = getline(&ln, &gl, stdin); if (read<=0 || ln[0]==0) { if(!silentREPL) putchar('\n'); break; } if (ln[read-1]==10) ln[--read] = 0; + if (ln[read-1]==13) ln[--read] = 0; cbqn_runLine(ln, read); free(ln); } diff --git a/src/windows/getline.c b/src/windows/getline.c index 285e7f5d..2097db42 100644 --- a/src/windows/getline.c +++ b/src/windows/getline.c @@ -19,7 +19,7 @@ ssize_t getline (char **lptr, size_t *n, FILE *fp) { goto error; } - convertResult = WideCharToMultiByte(CP_ACP, 0, buf, -1, NULL, 0, NULL, NULL); + convertResult = WideCharToMultiByte(CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL); if (convertResult == 0) { fprintf(stderr, "Failed to get MultiByte length: %d", GetLastError()); goto error; @@ -27,13 +27,13 @@ ssize_t getline (char **lptr, size_t *n, FILE *fp) { m = *lptr = (char*) calloc(convertResult, sizeof(char)); - if (WideCharToMultiByte(CP_ACP, 0, buf, -1, m, convertResult, NULL, NULL) == 0 ) { + if (WideCharToMultiByte(CP_UTF8, 0, buf, -1, m, convertResult, NULL, NULL) == 0 ) { fprintf(stderr, "Failed to convert wide characters: %d", GetLastError()); free(m); goto error; } - return convertResult; + return convertResult-1; error: CloseHandle(hIn);