From a5ad8e16de8fbc7c9e9b8d2b42e20453af1eaa44 Mon Sep 17 00:00:00 2001 From: apio Date: Sat, 13 May 2023 11:15:28 +0200 Subject: [PATCH] ls: Add the --human-readable flag --- apps/ls.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/ls.cpp b/apps/ls.cpp index 10d3bb11..093db522 100644 --- a/apps/ls.cpp +++ b/apps/ls.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -61,6 +62,7 @@ Result luna_main(int argc, char** argv) bool show_all { false }; bool show_almost_all { false }; bool long_list { false }; + bool human_readable { false }; os::ArgumentParser parser; parser.add_description("List files contained in a directory (defaults to '.', the current directory)"_sv); @@ -69,6 +71,8 @@ Result luna_main(int argc, char** argv) parser.add_switch_argument(show_all, 'a', "all"_sv, "also list hidden files (whose filename begins with a dot)"_sv); parser.add_switch_argument(show_almost_all, 'A', "almost-all"_sv, "list all files except '.' and '..'"_sv); parser.add_switch_argument(long_list, 'l', ""_sv, "use a long listing format"_sv); + parser.add_switch_argument(human_readable, 'h', "human-readable"_sv, + "with -l, show human-readable sizes e.g. 2KiB, 6GiB"_sv); parser.parse(argc, argv); Vector files; @@ -112,8 +116,17 @@ Result luna_main(int argc, char** argv) TRY(find_user_and_group(st, owner, group)); - os::println("%6o %u %4s %4s %10lu %s", st.st_mode, st.st_nlink, owner.chars(), group.chars(), st.st_size, - file.chars()); + if (!human_readable) + { + os::println("%6o %u %4s %4s %10lu %s", st.st_mode, st.st_nlink, owner.chars(), group.chars(), + st.st_size, file.chars()); + } + else + { + auto size = TRY(to_dynamic_unit(st.st_size)); + os::println("%6o %u %4s %4s %10s %s", st.st_mode, st.st_nlink, owner.chars(), group.chars(), + size.chars(), file.chars()); + } } }