crabc 0.7.8

A Rust musl-compatible libc with a dynamic linker
// Copyright (c) 2026 Meng Zhuo
// SPDX-License-Identifier: BSD-3-Clause

use std::fs::File;
use std::io::Write;
mod common;

use std::process::Command;

#[test]
fn stdio_input_functions_under_libc_so() {
    let bin = common::compile_fixture("stdio_input", &[]);

    let input_path = common::fixtures_dir().join("stdio_input_test.txt");
    {
        let mut f = File::create(&input_path).expect("create input file");
        f.write_all(b"hi\nxy\nz").expect("write input");
    }

    let output = Command::new(&bin)
        .env("LD_LIBRARY_PATH", common::debug_dir().to_str().unwrap())
        .stdin(File::open(&input_path).expect("open input"))
        .output()
        .expect("failed to run stdio_input_test");

    assert!(
        output.status.success(),
        "stdio_input_test exited with {:?}, stderr: {}",
        output.status.code(),
        String::from_utf8_lossy(&output.stderr)
    );
    assert_eq!(String::from_utf8_lossy(&output.stdout), "stdio input ok\n");
}