aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel/main.cpp')
-rw-r--r--kernel/kernel/main.cpp77
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