From d0261ebb355cbb5bd6acaafefe38013127933d7d Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Thu, 17 Jan 2019 19:56:51 -0700 Subject: [PATCH] Move db to crate root --- src/db.rs | 56 +++++++++++++++++++++++++++++++++++++++++ src/header/netdb/db.rs | 31 ----------------------- src/header/netdb/mod.rs | 13 +++------- src/lib.rs | 1 + 4 files changed, 61 insertions(+), 40 deletions(-) create mode 100644 src/db.rs delete mode 100644 src/header/netdb/db.rs diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 00000000..67f4d75b --- /dev/null +++ b/src/db.rs @@ -0,0 +1,56 @@ +use alloc::string::String; +use alloc::vec::Vec; + +use c_str::CStr; +use fs::File; +use header::fcntl; +use io::{self, BufRead, BufReader}; + +pub enum Separator { + Character(char), + Whitespace, +} + +pub struct Db<R: BufRead> { + reader: R, + separator: Separator, +} + +impl<R: BufRead> Db<R> { + pub fn new(reader: R, separator: Separator) -> Self { + Db { + reader, + separator + } + } + + pub fn read(&mut self) -> io::Result<Option<Vec<String>>> { + let mut line = String::new(); + if self.reader.read_line(&mut line)? == 0 { + return Ok(None); + } + + let vec = if let Some(not_comment) = line.trim().split('#').next() { + match self.separator { + Separator::Character(c) => not_comment.split(c).map(String::from).collect(), + Separator::Whitespace => not_comment.split_whitespace().map(String::from).collect(), + } + } else { + Vec::new() + }; + + Ok(Some(vec)) + } +} + +pub type FileDb = Db<BufReader<File>>; + +impl FileDb { + pub fn open(path: &CStr, separator: Separator) -> io::Result<Self> { + let file = File::open(path, fcntl::O_RDONLY | fcntl::O_CLOEXEC)?; + Ok(Db::new( + BufReader::new(file), + separator + )) + } +} diff --git a/src/header/netdb/db.rs b/src/header/netdb/db.rs deleted file mode 100644 index 77bca020..00000000 --- a/src/header/netdb/db.rs +++ /dev/null @@ -1,31 +0,0 @@ -use alloc::string::{String, ToString}; -use alloc::vec::Vec; - -use c_str::CStr; -use fs::File; -use header::fcntl; -use io::{self, BufRead, BufReader}; - -pub struct Db(BufReader<File>); - -impl Db { - pub fn new(path: &CStr) -> io::Result<Self> { - File::open(path, fcntl::O_RDONLY) - .map(BufReader::new) - .map(Db) - } - - pub fn read(&mut self) -> io::Result<Vec<String>> { - let mut parts = Vec::new(); - - let mut line = String::new(); - self.0.read_line(&mut line)?; - if let Some(not_comment) = line.split('#').next() { - for part in not_comment.split_whitespace() { - parts.push(part.to_string()); - } - } - - Ok(parts) - } -} diff --git a/src/header/netdb/mod.rs b/src/header/netdb/mod.rs index f8a0813c..e4ddb548 100644 --- a/src/header/netdb/mod.rs +++ b/src/header/netdb/mod.rs @@ -10,12 +10,6 @@ use alloc::str::SplitWhitespace; use alloc::vec::Vec; use c_str::{CStr, CString}; - -use platform; -use platform::rlb::{Line, RawLineBuffer}; -use platform::types::*; -use platform::{Pal, Sys}; - use header::arpa_inet::{htons, inet_aton}; use header::errno::*; use header::fcntl::O_RDONLY; @@ -25,6 +19,10 @@ use header::strings::strcasecmp; use header::sys_socket::constants::AF_INET; use header::sys_socket::{sockaddr, socklen_t}; use header::unistd::SEEK_SET; +use platform; +use platform::rlb::{Line, RawLineBuffer}; +use platform::types::*; +use platform::{Pal, Sys}; #[cfg(target_os = "linux")] #[path = "linux.rs"] @@ -34,9 +32,6 @@ pub mod sys; #[path = "redox.rs"] pub mod sys; -//TODO: use self::db::Db; -pub mod db; - use self::lookup::{lookup_addr, lookup_host}; pub mod lookup; diff --git a/src/lib.rs b/src/lib.rs index ddff3401..7cc40f81 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,6 +45,7 @@ extern crate spin; mod macros; pub mod c_str; pub mod cxa; +pub mod db; pub mod fs; pub mod header; pub mod io; -- GitLab