mirror of
https://github.com/uutils/coreutils
synced 2024-11-15 17:28:03 +00:00
Add macro to manually flush a writer.
I built upon the pipe_* macros, adding pipe_flush!() to flush an optional writer (default to stdout if no writer is given).
This commit is contained in:
parent
9ee7d96e5b
commit
d558e37288
4 changed files with 38 additions and 2 deletions
|
@ -162,6 +162,34 @@ macro_rules! pipe_writeln(
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! pipe_flush(
|
||||||
|
() => (
|
||||||
|
match ::std::io::stdout().flush() {
|
||||||
|
Ok(_) => true,
|
||||||
|
Err(f) => {
|
||||||
|
if f.kind() == ::std::io::ErrorKind::BrokenPipe {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
panic!("{}", f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
($fd:expr) => (
|
||||||
|
match $fd.flush() {
|
||||||
|
Ok(_) => true,
|
||||||
|
Err(f) => {
|
||||||
|
if f.kind() == ::std::io::ErrorKind::BrokenPipe {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
panic!("{}", f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! safe_write(
|
macro_rules! safe_write(
|
||||||
($fd:expr, $($args:tt)+) => (
|
($fd:expr, $($args:tt)+) => (
|
||||||
|
|
|
@ -12,10 +12,11 @@
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
||||||
use std::io::{stdout, Write};
|
use std::io::Write;
|
||||||
use std::str::from_utf8;
|
use std::str::from_utf8;
|
||||||
|
|
||||||
#[path = "../common/util.rs"]
|
#[path = "../common/util.rs"]
|
||||||
|
#[macro_use]
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -244,7 +245,7 @@ pub fn uumain(args: Vec<String>) -> i32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.newline {
|
if options.newline {
|
||||||
let _ = stdout().flush();
|
pipe_flush!();
|
||||||
} else {
|
} else {
|
||||||
println!("")
|
println!("")
|
||||||
}
|
}
|
||||||
|
|
6
src/env/env.rs
vendored
6
src/env/env.rs
vendored
|
@ -14,8 +14,13 @@
|
||||||
#![allow(non_camel_case_types)]
|
#![allow(non_camel_case_types)]
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::io::Write;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
#[path = "../common/util.rs"]
|
||||||
|
#[macro_use]
|
||||||
|
mod util;
|
||||||
|
|
||||||
struct options {
|
struct options {
|
||||||
ignore_env: bool,
|
ignore_env: bool,
|
||||||
null: bool,
|
null: bool,
|
||||||
|
@ -194,6 +199,7 @@ pub fn uumain(args: Vec<String>) -> i32 {
|
||||||
} else {
|
} else {
|
||||||
// no program provided
|
// no program provided
|
||||||
print_env(opts.null);
|
print_env(opts.null);
|
||||||
|
pipe_flush!();
|
||||||
}
|
}
|
||||||
|
|
||||||
0
|
0
|
||||||
|
|
|
@ -256,4 +256,5 @@ fn print_seq(first: f64, step: f64, last: f64, largest_dec: usize, separator: St
|
||||||
if (first >= last && step < 0f64) || (first <= last && step > 0f64) {
|
if (first >= last && step < 0f64) || (first <= last && step > 0f64) {
|
||||||
pipe_print!("{}", terminator);
|
pipe_print!("{}", terminator);
|
||||||
}
|
}
|
||||||
|
pipe_flush!();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue