Skip to content

Instantly share code, notes, and snippets.

@yoh2
Last active June 15, 2017 13:24
Show Gist options
  • Save yoh2/c7a1990b70391673d150ea9dd5fc869d to your computer and use it in GitHub Desktop.
Save yoh2/c7a1990b70391673d150ea9dd5fc869d to your computer and use it in GitHub Desktop.
yes
use std::iter::FromIterator;
use std::io::{Write, Result};
const BUF_SIZE: usize = 8192;
fn main() {
if let Some(message) = message() {
let buf = prepare_buf(&message.into_bytes());
let mut stdout = std::io::stdout();
while let Ok(written) = write_all(&mut stdout, &buf) {
if written != buf.len() {
break;
}
}
} else {
usage();
}
}
fn message() -> Option<String> {
let params = Vec::from_iter(std::env::args().skip(1));
if (params.len() == 1) && (params[0] == "--help") {
return None;
}
let first_index = if (params.len() > 0) && (params[0] == "--") { 1 } else { 0 };
if params.len() == first_index {
Some(String::from("y\n"))
} else {
let mut msg = params[first_index..].join(" ");
msg.push('\n');
Some(msg)
}
}
fn usage() {
println!("Usage: {} [--help|<messages...>]", std::env::args().next().unwrap());
}
fn prepare_buf(message: &[u8]) -> Vec<u8> {
let nr_repeats = std::cmp::max(1, BUF_SIZE / message.len());
let mut buf = vec![];
for _ in 0 .. nr_repeats {
buf.extend_from_slice(message);
}
return buf;
}
fn write_all(out: &mut Write, buf: &[u8]) -> Result<usize> {
let mut total_written = 0usize;
while total_written < buf.len() {
match out.write(&buf[total_written..]) {
Ok(size) => total_written += size,
Err(e) => return if total_written == 0 { Err(e) } else { Ok(total_written) },
}
}
Ok(total_written)
}
use std::iter::FromIterator;
use std::io::Write;
const BUF_SIZE: usize = 8192;
fn main() {
if let Some(message) = message() {
let buf = prepare_buf(&message.into_bytes());
let mut stdout = std::io::stdout();
while let Ok(_) = stdout.write_all(&buf) {
}
} else {
usage();
}
}
fn message() -> Option<String> {
let params = Vec::from_iter(std::env::args().skip(1));
if (params.len() == 1) && (params[0] == "--help") {
return None;
}
let first_index = if (params.len() > 0) && (params[0] == "--") { 1 } else { 0 };
if params.len() == first_index {
Some(String::from("y\n"))
} else {
let mut msg = params[first_index..].join(" ");
msg.push('\n');
Some(msg)
}
}
fn usage() {
println!("Usage: {} [--help|<messages...>]", std::env::args().next().unwrap());
}
fn prepare_buf(message: &[u8]) -> Vec<u8> {
let nr_repeats = std::cmp::max(1, BUF_SIZE / message.len());
let mut buf = vec![];
for _ in 0 .. nr_repeats {
buf.extend_from_slice(message);
}
return buf;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment