Browse Source

Correct internals for `os.read` on windows (read_console) for `os.stdin` (Fix #1556)

gingerBill 3 years ago
parent
commit
32988b0363
1 changed files with 3 additions and 2 deletions
  1. 3 2
      core/os/file_windows.odin

+ 3 - 2
core/os/file_windows.odin

@@ -108,7 +108,8 @@ read_console :: proc(handle: win32.HANDLE, b: []byte) -> (n: int, err: Errno) {
 	buf8: [4*BUF_SIZE]u8
 	
 	for n < len(b) && err == 0 {
-		max_read := u32(min(BUF_SIZE, len(b)/4))
+		min_read := max(min(len(b), 4), len(b)/4)
+		max_read := u32(min(BUF_SIZE, min_read))
 		
 		single_read_length: u32
 		ok := win32.ReadConsoleW(handle, &buf16[0], max_read, &single_read_length, nil)
@@ -129,7 +130,7 @@ read_console :: proc(handle: win32.HANDLE, b: []byte) -> (n: int, err: Errno) {
 			b[n] = x
 			n += 1
 		}
-		if ctrl_z || single_read_length < len(buf16) {
+		if ctrl_z || single_read_length < max_read {
 			break
 		}
 	}