diff options
author | Cyril Plisko <cyril.plisko@mountall.com> | 2016-08-08 15:07:09 +0300 |
---|---|---|
committer | Cyril Plisko <cyril.plisko@mountall.com> | 2016-08-08 15:18:25 +0300 |
commit | 8d3d44326f2d32270d9513617cc67eca92d5c591 (patch) | |
tree | 94dc1911b7a4f53d03e9bba37f3a17794ece030e /src/lib.rs | |
parent | 89019f54a33c98311addd0d42bd6794eb3aa063e (diff) |
Refactor
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 25 |
1 files changed, 13 insertions, 12 deletions
@@ -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) - } } |