#include #include #include #include #include #include #include Result luna_main(int argc, char** argv) { srand((unsigned)time(NULL)); bool make_directory { false }; StringView template_sv; os::ArgumentParser parser; parser.add_description("Create a temporary file or directory safely and print its name."); parser.add_system_program_info("mktemp"_sv); parser.add_switch_argument(make_directory, 'd', "directory"_sv, "make a directory instead of a file"_sv); parser.add_positional_argument(template_sv, "template"_sv, "/tmp/tmp.XXXXXX"_sv); parser.parse(argc, argv); String str = TRY(String::from_string_view(template_sv)); if (make_directory) { if (mkdtemp(str.mutable_data()) == nullptr) return err(errno); } else { int fd = -1; fd = mkstemp(str.mutable_data()); if (fd < 0) return err(errno); close(fd); } os::println("%s"_sv, str.chars()); return 0; }