summaryrefslogtreecommitdiffstats
path: root/src/path.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/path.rs')
-rw-r--r--src/path.rs30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/path.rs b/src/path.rs
index 2953982..f201f53 100644
--- a/src/path.rs
+++ b/src/path.rs
@@ -1,37 +1,43 @@
+use std::env;
use std::fs;
-use std::path::Path;
/// Refresh the shell's $PATH
///
/// This function caches all valid paths within within the directories
/// specified.
///
-/// # Arguments
-/// * `path` - A reference to a vector that holds a list to the shell $PATHs
-///
/// # Returns
/// * `bins: Vec<String>` - A new cache of all valid file paths in $PATH
///
/// # Examples
/// ```
-/// let path = vec!["/bin"];
-/// let path = path.into_iter().map(Path::new).collect();
-/// let mut bins = path::refresh(&path);
+/// let mut bins = path::refresh();
/// ...
/// // A situation occurs where the $PATH needs to be refreshed
-/// bins = path::refresh(&path)
+/// bins = path::refresh()
/// ```
-pub fn refresh(path: &Vec<&Path>) -> Vec<String> {
- let mut bins: Vec<String> = Vec::new();
+pub fn refresh() -> Vec<String> {
+ let mut bins = Vec::new();
+ let path = env::var("PATH").unwrap_or(String::new());
+ let mut path = path.split(':');
+
+ loop {
+ let p = match path.next() {
+ Some(p) => p,
+ None => break,
+ };
- for p in path {
let files = match fs::read_dir(p) {
Ok(files) => files,
Err(_) => continue,
};
for file in files {
- bins.push(file.unwrap().path().display().to_string());
+ let f = match file {
+ Ok(f) => f,
+ Err(_) => continue,
+ };
+ bins.push(f.path().display().to_string());
}
}