diff options
Diffstat (limited to 'kernel/kernel/main.cpp')
| -rw-r--r-- | kernel/kernel/main.cpp | 77 |
1 files changed, 56 insertions, 21 deletions
diff --git a/kernel/kernel/main.cpp b/kernel/kernel/main.cpp index e22c7ce0..52562ad7 100644 --- a/kernel/kernel/main.cpp +++ b/kernel/kernel/main.cpp @@ -206,30 +206,65 @@ auto run_demo() -> void } kstd::println("--> wrote {} to /dev/zero", bytes_written); - auto fd_7 = kapi::filesystem::open("/dev"); - if (fd_7) - { - kstd::println("--> successfully opened /dev as a file with file descriptor {}", fd_7.value()); - } - else - { - kapi::system::panic("demo failed"); - } + auto ls = [](std::string_view path) { + auto fd = kapi::filesystem::open(path); + if (fd) + { + kstd::println("--> ls '{}'", path); + } + else + { + kstd::println(kstd::print_sink::stderr, "!!> ls '{}': {}", path, fd.error()); + return; + } - auto devices = kstd::vector<kapi::filesystem::directory_entry>{10}; - auto entries_read = kapi::filesystem::read_directory(*fd_7, devices); - if (entries_read) - { - kstd::println("--> successfully got directory entries:"); - for (auto const & entry : std::ranges::subrange(devices.cbegin(), devices.cbegin() + *entries_read)) + auto entries = kstd::vector<kapi::filesystem::directory_entry>{10}; + auto read = kapi::filesystem::read_directory(*fd, entries); + if (read) { - kstd::println("\t{}", entry.name); + for (auto const & entry : std::ranges::subrange(entries.cbegin(), entries.cbegin() + *read)) + { + auto stat = kapi::filesystem::status(kstd::format("{}/{}", path, entry.name)); + if (stat) + { + kstd::println("\t{:<8} {:<#8o} {:>#8} {:>3}:{<3} {}", stat->inode_number, stat->mode, stat->size, + stat->raw_device.major, stat->raw_device.minor, entry.name); + } + else + { + kstd::println(kstd::print_sink::stderr, "!!> ls '{}': {}", path, stat.error()); + } + } } - } - else - { - kapi::system::panic("demo failed"); - } + else if (read.error() == kstd::errc::not_a_directory) + { + auto stat = kapi::filesystem::status(kstd::format("{}", path)); + if (stat) + { + kstd::println("\t{:<8} {:<#8o} {:>#8} {:>3}:{<3} {}", stat->inode_number, stat->mode, stat->size, + stat->raw_device.major, stat->raw_device.minor, path); + } + else + { + kstd::println(kstd::print_sink::stderr, "!!> ls '{}': {}", path, stat.error()); + } + } + else + { + kstd::println(kstd::print_sink::stderr, "!!> ls '{}': {}", path, read.error()); + return; + } + }; + + ls("/"); + ls("/lost+found"); + ls("/entrance"); + ls("/enclosures"); + ls("/symlinks"); + ls("/info.txt"); + ls("/test_files"); + ls("/dev"); + ls("/does_not_exist"); } auto main() -> int |
