From ab1b6bcea587577d2f855bfa6f3ea86b5345a74c Mon Sep 17 00:00:00 2001 From: Fabian Boehm Date: Sun, 12 Jan 2025 13:15:00 +0100 Subject: [PATCH] fish_indent: Correctly read from builtin stdin This still used read_file, but we don't *really* have an fd if we're connected to another builtin. --- src/builtins/fish_indent.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/builtins/fish_indent.rs b/src/builtins/fish_indent.rs index e65938421..683d4a5a5 100644 --- a/src/builtins/fish_indent.rs +++ b/src/builtins/fish_indent.rs @@ -8,7 +8,7 @@ use std::ffi::{CString, OsStr}; use std::fs; -use std::io::{stdin, Read, Write}; +use std::io::{Read, Write}; use std::os::unix::ffi::OsStrExt; use crate::panic::panic_handler; @@ -848,10 +848,16 @@ fn do_indent(streams: &mut IoStreams, args: Vec) -> i32 { )); return STATUS_CMD_ERROR.unwrap(); } - match read_file(stdin()) { - Ok(s) => src = s, - Err(()) => return STATUS_CMD_ERROR.unwrap(), + let mut zero = 0; + let buf = Vec::with_capacity(1024); + let mut expression = WString::new(); + for (arg, _) in Arguments::new(&buf, &mut zero, streams, 1024) { + if !expression.is_empty() { + expression.push('\n') + } + expression.push_utfstr(&arg); } + src = expression; } else { let arg = args[i]; match fs::File::open(OsStr::from_bytes(&wcs2string(arg))) {