summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
authorCyril Plisko <cyril.plisko@mountall.com>2016-08-08 15:07:09 +0300
committerCyril Plisko <cyril.plisko@mountall.com>2016-08-08 15:18:25 +0300
commit8d3d44326f2d32270d9513617cc67eca92d5c591 (patch)
tree94dc1911b7a4f53d03e9bba37f3a17794ece030e /src/lib.rs
parent89019f54a33c98311addd0d42bd6794eb3aa063e (diff)
Refactor
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/lib.rs b/src/lib.rs
index e8c50ba..eda5ba2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -37,32 +37,38 @@
extern crate libc;
-use std::ffi::CString;
-use std::ptr;
+use std::ffi::OsString;
mod helper;
-use helper::{getenv, fork, close, dup2, execvp, pipe, default_pager};
+use helper::{fork, close, dup2, execvp, pipe, find_pager};
const DEFAULT_PAGER_ENV: &'static str = "PAGER";
#[derive(Debug, Default)]
pub struct Pager {
+ pager: Option<OsString>,
env: String,
ok: bool,
}
impl Pager {
pub fn new() -> Self {
+ let pager = find_pager(DEFAULT_PAGER_ENV);
+
Pager {
- env: String::from(DEFAULT_PAGER_ENV),
+ pager: pager,
+ env: DEFAULT_PAGER_ENV.into(),
ok: true,
}
}
pub fn env(env: &str) -> Self {
+ let pager = find_pager(env);
+
Pager {
- env: String::from(env),
+ pager: pager,
+ env: env.into(),
ok: true,
}
}
@@ -72,7 +78,7 @@ impl Pager {
}
pub fn setup(&mut self) {
- if let Some(pager) = self.get_pager() {
+ if let Some(ref pager) = self.pager {
let (pager_stdin, main_stdout) = pipe();
let pid = fork();
match pid {
@@ -89,16 +95,11 @@ impl Pager {
}
_ => {
// I am parent
- let argv = vec![pager.as_ptr(), ptr::null()];
dup2(pager_stdin, libc::STDIN_FILENO);
close(main_stdout);
- execvp(argv);
+ execvp(vec![pager]);
}
}
}
}
-
- fn get_pager(&self) -> Option<CString> {
- getenv(&self.env).or_else(default_pager)
- }
}