write_text

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

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

Loading…
Cancel
Save