Serenity Operating System
at master 42 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2020, Peter Elliott <pelliott@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibCore/ArgsParser.h> 8#include <LibCore/FilePermissionsMask.h> 9#include <LibCore/System.h> 10#include <LibMain/Main.h> 11#include <sys/stat.h> 12 13ErrorOr<int> serenity_main(Main::Arguments arguments) 14{ 15 TRY(Core::System::pledge("stdio dpath")); 16 17 DeprecatedString mode_string; 18 mode_t mask_reference_mode = 0777; 19 mode_t mode = 0666; 20 Vector<StringView> paths; 21 22 Core::ArgsParser args_parser; 23 args_parser.add_option(mode_string, "Set FIFO permissions", "mode", 'm', "mode"); 24 args_parser.add_positional_argument(paths, "Paths of FIFOs to create", "paths"); 25 args_parser.parse(arguments); 26 27 if (!mode_string.is_empty()) { 28 auto mask = TRY(Core::FilePermissionsMask::parse(mode_string)); 29 mode = mask.apply(mask_reference_mode); 30 } 31 32 int exit_code = 0; 33 for (auto path : paths) { 34 auto error_or_void = Core::System::mkfifo(path, mode); 35 if (error_or_void.is_error()) { 36 perror("mkfifo"); 37 exit_code = 1; 38 } 39 } 40 41 return exit_code; 42}