From 9eb7030b55b1b7c15e443fa90810651baed6f8ae Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 23 Nov 2021 12:27:33 +0100 Subject: [PATCH] truncate: Port to LibMain and use LibCore syscall wrappers :^) --- Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/truncate.cpp | 53 ++++++++++--------------------- 2 files changed, 17 insertions(+), 37 deletions(-) diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 0d396932be..a17cbbdf92 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -97,6 +97,7 @@ target_link_libraries(test-crypto LibCrypto LibTLS LibLine) target_link_libraries(test-fuzz LibCore LibGemini LibGfx LibHTTP LibIPC LibJS LibMarkdown LibShell) target_link_libraries(test-imap LibIMAP) target_link_libraries(test-pthread LibThreading) +target_link_libraries(truncate LibMain) target_link_libraries(tt LibPthread) target_link_libraries(unzip LibArchive LibCompress) target_link_libraries(zip LibArchive LibCompress LibCrypto) diff --git a/Userland/Utilities/truncate.cpp b/Userland/Utilities/truncate.cpp index 40736f083b..7e5387ab2d 100644 --- a/Userland/Utilities/truncate.cpp +++ b/Userland/Utilities/truncate.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include - +#include +#include #include #include #include @@ -17,7 +18,7 @@ enum TruncateOperation { OP_Shrink, }; -int main(int argc, char** argv) +ErrorOr serenity_main(Main::Arguments arguments) { const char* resize = nullptr; const char* reference = nullptr; @@ -27,15 +28,15 @@ int main(int argc, char** argv) args_parser.add_option(resize, "Resize the target file to (or by) this size. Prefix with + or - to expand or shrink the file, or a bare number to set the size exactly", "size", 's', "size"); args_parser.add_option(reference, "Resize the target file to match the size of this one", "reference", 'r', "file"); args_parser.add_positional_argument(file, "File path", "file"); - args_parser.parse(argc, argv); + args_parser.parse(arguments); if (!resize && !reference) { - args_parser.print_usage(stderr, argv[0]); + args_parser.print_usage(stderr, arguments.argv[0]); return 1; } if (resize && reference) { - args_parser.print_usage(stderr, argv[0]); + args_parser.print_usage(stderr, arguments.argv[0]); return 1; } @@ -58,55 +59,33 @@ int main(int argc, char** argv) auto size_opt = str.to_int(); if (!size_opt.has_value()) { - args_parser.print_usage(stderr, argv[0]); + args_parser.print_usage(stderr, arguments.argv[0]); return 1; } size = size_opt.value(); } if (reference) { - struct stat st; - int rc = stat(reference, &st); - if (rc < 0) { - perror("stat"); - return 1; - } - - size = st.st_size; + auto stat = TRY(Core::System::stat(reference)); + size = stat.st_size; } - int fd = open(file, O_RDWR | O_CREAT, 0666); - if (fd < 0) { - perror("open"); - return 1; - } - - struct stat st; - if (fstat(fd, &st) < 0) { - perror("fstat"); - return 1; - } + auto fd = TRY(Core::System::open(file, O_RDWR | O_CREAT, 0666)); + auto stat = TRY(Core::System::fstat(fd)); switch (op) { case OP_Set: break; case OP_Grow: - size = st.st_size + size; + size = stat.st_size + size; break; case OP_Shrink: - size = st.st_size - size; + size = stat.st_size - size; break; } - if (ftruncate(fd, size) < 0) { - perror("ftruncate"); - return 1; - } - - if (close(fd) < 0) { - perror("close"); - return 1; - } + TRY(Core::System::ftruncate(fd, size)); + TRY(Core::System::close(fd)); return 0; }