48 lines
1.2 KiB
Zig
48 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();
|
|
}
|