zig-toybox/src/ls.zig

49 lines
1.2 KiB
Zig

const std = @import("std");
const fs = std.fs;
const lib = @import("./lib.zig");
// WON'T: human output => use human command instead
// TODO: error management.
// TODO: verbose output (-l).
pub const cwd = fs.cwd();
// Either print directory's content or file.
fn print_element(path: []const u8) !void {
var dir: fs.Dir = cwd.openDir(path, .{.iterate = true}) catch |err| switch (err) {
error.NotDir => return lib.print("{s}\n", .{path}),
else => return err,
};
var dir_it = dir.iterate();
while (try dir_it.next()) |entry| {
lib.print("{s}\n", .{entry.name});
}
}
pub fn ls() !void {
var cli = try lib.CLI.init();
defer cli.deinit();
// Skipping the executable binary name.
var arg_idx: usize = 1;
// case there are parameters
while(arg_idx < cli.args.len) {
const element = cli.nextArg(&arg_idx) orelse {
lib.warn("Null argument\n", .{});
return error.InvalidArgs;
};
try print_element(element);
}
// case there were no parameter, print current directory
if (cli.args.len == 1) {
try print_element(".");
}
}
pub fn main() !void {
try ls();
}