Serenity Operating System
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}