From 917e32d31adcb930bf6fb88f28ea1cc9cd45dc75 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Sun, 18 Dec 2022 13:25:08 +0100 Subject: [PATCH] uptime: Port to Core::Stream::File, use `AK::human_readable_time()` --- Userland/Utilities/uptime.cpp | 49 ++++++++--------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/Userland/Utilities/uptime.cpp b/Userland/Utilities/uptime.cpp index 94693287d9..265fda6be5 100644 --- a/Userland/Utilities/uptime.cpp +++ b/Userland/Utilities/uptime.cpp @@ -1,57 +1,30 @@ /* * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2022, Karol Kosek * * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include +#include #include #include -#include -#include ErrorOr serenity_main(Main::Arguments) { TRY(Core::System::pledge("stdio rpath")); - FILE* fp = fopen("/sys/kernel/uptime", "r"); - if (!fp) { - perror("fopen(/sys/kernel/uptime)"); - return 1; - } + auto file = TRY(Core::Stream::File::open("/sys/kernel/uptime"sv, Core::Stream::OpenMode::Read)); TRY(Core::System::pledge("stdio")); - char buffer[BUFSIZ]; - auto* p = fgets(buffer, sizeof(buffer), fp); - if (!p) { - perror("fgets"); - return 1; - } + Array buffer; + auto read_buffer = TRY(file->read(buffer)); + auto maybe_seconds = AK::StringUtils::convert_to_uint(StringView(read_buffer)); + if (!maybe_seconds.has_value()) + return Error::from_string_literal("Couldn't convert to number"); + auto seconds = maybe_seconds.release_value(); - unsigned seconds; - sscanf(buffer, "%u", &seconds); - - out("Up "); - - if (seconds / 86400 > 0) { - out("{} day{}, ", seconds / 86400, (seconds / 86400) == 1 ? "" : "s"); - seconds %= 86400; - } - - if (seconds / 3600 > 0) { - out("{} hour{}, ", seconds / 3600, (seconds / 3600) == 1 ? "" : "s"); - seconds %= 3600; - } - - if (seconds / 60 > 0) { - out("{} minute{}, ", seconds / 60, (seconds / 60) == 1 ? "" : "s"); - seconds %= 60; - } - - out("{} second{}", seconds, seconds == 1 ? "" : "s"); - outln(); - - fclose(fp); + outln("Up {}", human_readable_time(seconds)); return 0; }