这是indexloc提供的服务,不要输入任何密码
Skip to content

When reading from os2.stdin.stream using io.read_full, input is sometimes skipped or lost on Windows. #5086

@c4veman

Description

@c4veman

Context

Odin:    dev-2025-04-nightly:d9f990d
OS:      Windows 10 Professional (version: 22H2), build 19045.5737
CPU:     AMD Ryzen 7 5700X 8-Core Processor
RAM:     32688 MiB
Backend: LLVM 20.1.0

Expected Behavior

Using os2.stdin.stream should behave the same as os.stream_from_handle(os.stdin), reading all provided input.

// test_os.odin
package main

import "core:strconv"
import "core:os"
import "core:io"
import "core:fmt"

main :: proc() {
	content_len, _ := strconv.parse_int(os.args[1])
	stdin_stream := os.stream_from_handle(os.stdin)

	data := make([]byte, content_len)
	if _, err := io.read_full(stdin_stream, data); err != nil {
		fmt.eprintfln("io.read_full err: %v", err)
	}
	fmt.println(string(data))
}

odin run test_os.odin -file -- 26 Enter abcdefghijklmnopqrstuvwxyz Enter

C:\code\os2_stdin>odin run test_os.odin -file -- 26  
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

C:\code\os2_stdin>

Current Behavior

// test_os2.odin
package main

import "core:strconv"
import "core:os/os2"
import "core:io"
import "core:fmt"

main :: proc() {
	content_len, _ := strconv.parse_int(os2.args[1])

	data := make([]byte, content_len)
	if _, err := io.read_full(os2.stdin.stream, data); err != nil {
		fmt.eprintfln("io.read_full err: %v", err)
	}
	fmt.println(string(data))
}

odin run test_os2.odin -file -- 26 Enter abcdefghijklmnopqrstuvwxyz Enter Enter

C:\code\os2_stdin>odin run test_os2.odin -file -- 26 
abcdefghijklmnopqrstuvwxyz

abcdefghijklmnopqrstuvyz


C:\code\os2_stdin>

Removing +i from

for i := 0; i < len(src) && n+i < len(b); i += 1 {

which is not present in
for i := 0; i < len(src) && n < len(b); i += 1 {

seems to fix the issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions