//! Lists a directory: `ls [dir]`, the root by default. #![no_std] #![forbid(unsafe_code)] #![no_main] extern crate libkos; use libkos::fs::{FsError, Storage}; use libkos::println; /// Where storage's buffer is mapped. const STORAGE_BUF_VA: types::address::VirtualAddress = types::address::VirtualAddress::from_raw(0x0180_0000); libkos::entry!(main); fn main() { let Some(mut fs) = libkos::start::storage().and_then(|ep| Storage::attach(ep, STORAGE_BUF_VA).ok()) else { println!("ls: no storage"); return; }; let dir = libkos::start::args().nth(1).unwrap_or("/"); let listed = fs.list_dir(dir.as_bytes(), |e| { let name = core::str::from_utf8(e.name()).unwrap_or("?"); if name == "." || name == ".." { return; } if e.is_dir { println!("{}/", name); } else { println!("{:<24} {:>8}", name, e.size); } }); match listed { Ok(_) => {} Err(FsError::Denied) => println!("ls: {}: outside what it was given", dir), Err(_) => println!("ls: {}: no such directory", dir), } }