aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: f16a236d53cad56bc4f1089b4422b6d939ac9e32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// SPDX-License-Identifier: AGPL-3.0-only

use std::{
    io::{Read, Write},
    process::{exit, Command, Stdio},
};

fn main() {
    let args = std::env::args().skip(1);

    let args = args.collect::<Vec<_>>();
    if args.len() == 0 {
        eprintln!("desterr: no command");
        exit(1);
    }

    let mut proc = Command::new(&args[0])
        .args(&args[1..])
        .stderr(Stdio::piped())
        .stdout(Stdio::inherit())
        .stdin(Stdio::inherit())
        .spawn()
        .unwrap();

    let mut cstderr = proc.stderr.take().unwrap();
    let mut buf = [0u8; 1024];
    let mut pstderr = std::io::stderr();

    while let Ok(r) = cstderr.read(&mut buf) {
        if r == 0 {
            break;
        }
        pstderr.write_fmt(format_args!("\x1b[31m")).unwrap();
        pstderr.write(&buf[..r]).unwrap();
        pstderr.write_fmt(format_args!("\x1b[0m")).unwrap();
    }
}