diff --git a/src/builtin/ls.rs b/src/builtin/ls.rs index cd3725d..45576d3 100644 --- a/src/builtin/ls.rs +++ b/src/builtin/ls.rs @@ -11,8 +11,13 @@ impl Call for Ls { let cwd = env::current_dir()?; let dir = fs::read_dir(&cwd)?; for child in dir { - let child = child?; - _ = write!(ctx.stdout, "{}\n", child.path().display()); + let child_path = child?.path(); + let fname = child_path + .file_name() + .ok_or_else(|| ExecError::new("no file name"))? + .to_str() + .ok_or_else(|| ExecError::new("non-unicode file name"))?; + _ = write!(ctx.stdout, "{}\n", fname); } Ok(Value::None) } diff --git a/src/error.rs b/src/error.rs index e1ce4dc..79a107a 100644 --- a/src/error.rs +++ b/src/error.rs @@ -126,6 +126,10 @@ impl ExecError { pub fn type_error>(msg: S) -> Self { Self::ValueTypeError(msg.into()) } + + pub fn new>(msg: S) -> Self { + Self::Misc(msg.into()) + } } impl Error {