diff options
author | Benji Dial <benji6283@gmail.com> | 2020-09-13 22:59:42 -0400 |
---|---|---|
committer | Benji Dial <benji6283@gmail.com> | 2020-09-13 22:59:42 -0400 |
commit | 20853582d5385d12421433d21910e783caa00764 (patch) | |
tree | 446bbd18353cfe0897d293a822458b7960a3645e /src/user/dirinfo/dirinfo.c | |
parent | 44d29a33df81ac07163d5146a9e43a0c4fb80af0 (diff) | |
download | portland-os-20853582d5385d12421433d21910e783caa00764.tar.gz |
dirinfo command
Diffstat (limited to 'src/user/dirinfo/dirinfo.c')
-rw-r--r-- | src/user/dirinfo/dirinfo.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/user/dirinfo/dirinfo.c b/src/user/dirinfo/dirinfo.c new file mode 100644 index 0000000..7484eb8 --- /dev/null +++ b/src/user/dirinfo/dirinfo.c @@ -0,0 +1,49 @@ +#include <pland/syscall.h> +#include <knob/format.h> +#include <knob/file.h> +#include <knob/user.h> + +#define MAX_DIR_ENTRIES 20 + +void main(const char *arg) { + uint8_t dn; + const char *path = remove_prefix(arg, &dn); + + tell_user_sz("Directory info for "); + tell_user_sz(*arg ? arg : "drive root"); + tell_user_sz("\n"); + + _dir_info_entry infos[MAX_DIR_ENTRIES]; + uint8_t count = _enumerate_dir(dn, path, infos, MAX_DIR_ENTRIES); + tell_user_sz( + count == MAX_DIR_ENTRIES + ? "Truncated to 20 entries.\n\n" + : "\n" + ); + + uint32_t total_size = 0; + + if (!count) + tell_user_sz("(none)\n"); + + for (uint8_t i = 0; i < count; ++i) { + tell_user_sz(infos[i].name); + tell_user_sz(": "); + if (infos[i].is_dir) + tell_user_sz("dir"); + else { + char nbuf[11]; + itosz(infos[i].size, nbuf); + tell_user_sz(nbuf); + tell_user_sz(" bytes"); + total_size += infos[i].size; + } + tell_user_sz("\n"); + } + + tell_user_sz("\nTotal size without subdirectories: "); + char nbuf[11]; + itosz(total_size, nbuf); + tell_user_sz(nbuf); + tell_user_sz(" bytes\n"); +}
\ No newline at end of file |