diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 7454cceeb6..ae46024532 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -65,6 +65,7 @@ target_link_libraries(cat LibMain) target_link_libraries(checksum LibCrypto LibMain) target_link_libraries(chmod LibMain) target_link_libraries(chgrp LibMain) +target_link_libraries(chown LibMain) target_link_libraries(chres LibGUI) target_link_libraries(cksum LibCrypto) target_link_libraries(config LibConfig) diff --git a/Userland/Utilities/chown.cpp b/Userland/Utilities/chown.cpp index a3e69dacde..08d1c04bbd 100644 --- a/Userland/Utilities/chown.cpp +++ b/Userland/Utilities/chown.cpp @@ -6,6 +6,8 @@ #include #include +#include +#include #include #include #include @@ -13,14 +15,11 @@ #include #include -int main(int argc, char** argv) +ErrorOr serenity_main(Main::Arguments arguments) { - if (pledge("stdio rpath chown", nullptr) < 0) { - perror("pledge"); - return 1; - } + TRY(Core::System::pledge("stdio rpath chown", nullptr)); - if (argc < 3) { + if (arguments.strings.size() < 3) { warnln("usage: chown "); return 1; } @@ -28,7 +27,7 @@ int main(int argc, char** argv) uid_t new_uid = -1; gid_t new_gid = -1; - auto parts = String(argv[1]).split(':', true); + auto parts = arguments.strings[1].split_view(':', true); if (parts.is_empty()) { warnln("Empty uid/gid spec"); return 1; @@ -42,12 +41,8 @@ int main(int argc, char** argv) if (number.has_value()) { new_uid = number.value(); } else { - auto* passwd = getpwnam(parts[0].characters()); - if (!passwd) { - warnln("Unknown user '{}'", parts[0]); - return 1; - } - new_uid = passwd->pw_uid; + auto passwd = TRY(Core::System::getpwnam(parts[0])); + new_uid = passwd.pw_uid; } if (parts.size() == 2) { @@ -55,20 +50,12 @@ int main(int argc, char** argv) if (number.has_value()) { new_gid = number.value(); } else { - auto* group = getgrnam(parts[1].characters()); - if (!group) { - warnln("Unknown group '{}'", parts[1]); - return 1; - } - new_gid = group->gr_gid; + auto group = TRY(Core::System::getgrnam(parts[1])); + new_gid = group.gr_gid; } } - int rc = chown(argv[2], new_uid, new_gid); - if (rc < 0) { - perror("chown"); - return 1; - } + TRY(Core::System::chown(arguments.strings[2], new_uid, new_gid)); return 0; }