From 9815ad556a81a2a5e332f1c152afdc4447a23b69 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 29 Nov 2021 22:23:27 +0100 Subject: [PATCH] fortune: Port to LibMain :^) --- Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/fortune.cpp | 37 +++++++++---------------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index b6a6c560a7..a9b9a66390 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -74,6 +74,7 @@ target_link_libraries(echo LibMain) target_link_libraries(expr LibRegex) target_link_libraries(fdtdump LibDeviceTree) target_link_libraries(file LibGfx LibIPC LibCompress) +target_link_libraries(fortune LibMain) target_link_libraries(functrace LibDebug LibX86) target_link_libraries(gml-format LibGUI) target_link_libraries(grep LibRegex) diff --git a/Userland/Utilities/fortune.cpp b/Userland/Utilities/fortune.cpp index 0b9fe4b9e2..0475dd955c 100644 --- a/Userland/Utilities/fortune.cpp +++ b/Userland/Utilities/fortune.cpp @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include #include @@ -69,47 +71,30 @@ static Vector parse_all(const JsonArray& array) return quotes; } -int main(int argc, char** argv) +ErrorOr serenity_main(Main::Arguments arguments) { - if (pledge("stdio rpath", nullptr) < 0) { - perror("pledge"); - return 1; - } + TRY(Core::System::pledge("stdio rpath")); const char* path = "/res/fortunes.json"; Core::ArgsParser args_parser; args_parser.set_general_help("Open a fortune cookie, receive a free quote for the day!"); args_parser.add_positional_argument(path, "Path to JSON file with quotes (/res/fortunes.json by default)", "path", Core::ArgsParser::Required::No); - args_parser.parse(argc, argv); + args_parser.parse(arguments); - auto file = Core::File::construct(path); - if (!file->open(Core::OpenMode::ReadOnly)) { - warnln("Couldn't open {} for reading: {}", path, file->error_string()); - return 1; - } + auto file = TRY(Core::File::open(path, Core::OpenMode::ReadOnly)); - if (pledge("stdio", nullptr) < 0) { - perror("pledge"); - return 1; - } - if (unveil(nullptr, nullptr) < 0) { - perror("unveil"); - return 1; - } + TRY(Core::System::pledge("stdio")); + TRY(Core::System::unveil(nullptr, nullptr)); auto file_contents = file->read_all(); - auto json = JsonValue::from_string(file_contents); - if (json.is_error()) { - warnln("Couldn't parse {} as JSON", path); - return 1; - } - if (!json.value().is_array()) { + auto json = TRY(JsonValue::from_string(file_contents)); + if (!json.is_array()) { warnln("{} does not contain an array of quotes", path); return 1; } - const auto quotes = parse_all(json.value().as_array()); + const auto quotes = parse_all(json.as_array()); if (quotes.is_empty()) { warnln("{} does not contain any valid quotes", path); return 1;