From 4a077a88b3c8290935e05283caa861e253278582 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 12 May 2018 08:12:53 +0000 Subject: Add: initial commit --- .gitignore | 3 +++ Cargo.toml | 6 ++++++ src/main.rs | 37 +++++++++++++++++++++++++++++++++++++ zeros | Bin 0 -> 12765 bytes 4 files changed, 46 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/main.rs create mode 100644 zeros diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70e3cae --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ + +/target +**/*.rs.bk diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..3eb3e52 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "cat" +version = "0.1.0" +authors = ["liw"] + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..b2ee6f0 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +use std::env; +use std::fs::File; +use std::io; +use std::io::prelude::*; + +const BUFSIZE: usize = 17; + +fn main() { + let args: Vec = env::args().collect(); + for arg in &args[1..] { + cat(arg, BUFSIZE); + } +} + + +fn cat(filename: &str, bufsize: usize) { + // The following gives fugly error message if there's a problem. + // Need to find a better way to report errors to normal people. + let mut f = File::open(filename).unwrap(); + + let mut buffer = vec![0; bufsize]; + loop { + match f.read(&mut buffer).unwrap() { + 0 => break, + n => write(&buffer[..n]), + }; + } +} + + +fn write(buffer: &[u8]) { + // Again, the error message is fugly if there's a problem. Also, + // ideally this wouldn't hardcode the output stream, but it turns + // out that io::stdout() doesn't return a File, so passing in an + // open file is tricky. + io::stdout().write(&buffer).unwrap(); +} diff --git a/zeros b/zeros new file mode 100644 index 0000000..eec1b74 Binary files /dev/null and b/zeros differ -- cgit v1.2.1