write_text

pull/1/head
dvkt 4 years ago
parent 915945b1ed
commit 1708db9ffa

@ -95,7 +95,7 @@ impl Request {
fn respond(&mut self) -> Result<()> { fn respond(&mut self) -> Result<()> {
let md = fs::metadata(self.path()?)?; let md = fs::metadata(self.path()?)?;
if md.is_file() { if md.is_file() {
self.send_text() write_text(&self.stream, self.path()?)
} else if md.is_dir() { } else if md.is_dir() {
self.send_dir() self.send_dir()
} else { } else {
@ -123,31 +123,32 @@ impl Request {
menu.end()?; menu.end()?;
Ok(()) Ok(())
} }
}
/// Send a text document to the client. /// Send a text file to the client.
fn send_text(&mut self) -> Result<()> { fn write_text<'a, W>(mut w: &'a W, path: PathBuf) -> Result<()>
let path = self.path()?; where
let md = fs::metadata(&path)?; &'a W: Write,
let mut f = fs::File::open(&path)?; {
let mut buf = [0; 1024]; let md = fs::metadata(&path)?;
let mut bytes = md.len(); let mut f = fs::File::open(&path)?;
while bytes > 0 { let mut buf = [0; 1024];
let n = f.read(&mut buf[..])?; let mut bytes = md.len();
bytes -= n as u64; while bytes > 0 {
self.stream.write_all(&buf[..n])?; let n = f.read(&mut buf[..])?;
} bytes -= n as u64;
self.stream.write_all(b"\r\n.\r\n")?; // end gopher response w.write_all(&buf[..n])?;
Ok(())
} }
w.write_all(b"\r\n.\r\n")?; // end gopher response
Ok(())
} }
/// Determine the gopher type for a DirEntry on disk. /// Determine the gopher type for a DirEntry on disk.
fn file_type(dir: &fs::DirEntry) -> ItemType { fn file_type(dir: &fs::DirEntry) -> ItemType {
let metadata = dir.metadata(); let metadata = match dir.metadata() {
if metadata.is_err() { Err(_) => return ItemType::Error,
return ItemType::Error; Ok(md) => md,
} };
let metadata = metadata.unwrap();
if metadata.is_file() { if metadata.is_file() {
if let Ok(file) = fs::File::open(&dir.path()) { if let Ok(file) = fs::File::open(&dir.path()) {

Loading…
Cancel
Save