|
@@ -1,19 +1,28 @@
|
|
|
/*
|
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
|
* Copyright (c) 2022, Karol Kosek <krkk@serenityos.org>
|
|
|
+ * Copyright (c) 2024, Sam Atkins <atkinssj@serenityos.org>
|
|
|
*
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
*/
|
|
|
|
|
|
#include <AK/NumberFormat.h>
|
|
|
+#include <LibCore/ArgsParser.h>
|
|
|
+#include <LibCore/DateTime.h>
|
|
|
#include <LibCore/File.h>
|
|
|
#include <LibCore/System.h>
|
|
|
#include <LibMain/Main.h>
|
|
|
|
|
|
-ErrorOr<int> serenity_main(Main::Arguments)
|
|
|
+ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|
|
{
|
|
|
TRY(Core::System::pledge("stdio rpath"));
|
|
|
|
|
|
+ bool pretty_output = false;
|
|
|
+
|
|
|
+ Core::ArgsParser args_parser;
|
|
|
+ args_parser.add_option(pretty_output, "Output only the uptime, in human-readable format", "pretty", 'p');
|
|
|
+ args_parser.parse(arguments);
|
|
|
+
|
|
|
auto file = TRY(Core::File::open("/sys/kernel/uptime"sv, Core::File::OpenMode::Read));
|
|
|
|
|
|
TRY(Core::System::pledge("stdio"));
|
|
@@ -25,6 +34,14 @@ ErrorOr<int> serenity_main(Main::Arguments)
|
|
|
return Error::from_string_literal("Couldn't convert to number");
|
|
|
auto seconds = maybe_seconds.release_value();
|
|
|
|
|
|
- outln("Up {}", human_readable_time(seconds));
|
|
|
+ if (pretty_output) {
|
|
|
+ outln("Up {}", human_readable_time(seconds));
|
|
|
+ } else {
|
|
|
+ auto current_time = TRY(Core::DateTime::now().to_string());
|
|
|
+ // FIXME: To match Linux and the BSDs, we should also include the number of current users,
|
|
|
+ // and some load averages, but these don't seem to be available yet.
|
|
|
+ outln("{} up {}", current_time, human_readable_digital_time(seconds));
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|