diff options
Diffstat (limited to 'src/zenutil/service.cpp')
| -rw-r--r-- | src/zenutil/service.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/zenutil/service.cpp b/src/zenutil/service.cpp index cce154988..8ac35d969 100644 --- a/src/zenutil/service.cpp +++ b/src/zenutil/service.cpp @@ -11,6 +11,9 @@ #endif #if ZEN_PLATFORM_MAC # include <zencore/filesystem.h> + +# include <unistd.h> +# include <sys/stat.h> #endif namespace zen { @@ -137,9 +140,9 @@ namespace { ExtendableStringBuilder<256> ProgramArguments; for (const std::string_view Argument : Arguments) { - ProgramArguments.Append("<string>\n"); + ProgramArguments.Append(" <string>"); AppendEscaped(Argument, ProgramArguments); - ProgramArguments.Append("\n</string>\n"); + ProgramArguments.Append("</string>\n"); } return fmt::format( @@ -152,7 +155,7 @@ namespace { " <key>ProgramArguments</key>\n" " <array>\n" " <string>{}</string>\n" // Program name - " {}" // "<string>arg</string>\n" * number of arguments + "{}" // "<string>arg</string>\n" * number of arguments " </array>\n" " <key>KeepAlive</key>\n" " <true/>\n" @@ -526,13 +529,21 @@ InstallService(const std::filesystem::path& ExecutablePath, std::string_view ServiceDescription) { std::filesystem::path SymLink = std::filesystem::path("/usr/local/libexec") / ExecutablePath.filename(); + ZEN_INFO("Attempting synlink from {} to {}", ExecutablePath.string(), SymLink.string()); if (symlink(ExecutablePath.c_str(), SymLink.c_str()) == -1) { return MakeErrorCodeFromLastError(); } std::string DaemonName = fmt::format("com.epicgames.unreal.{}", ServiceName); std::string PList = BuildPlist(ExecutablePath, CommandLineOptions, DaemonName, ServiceDisplayName, ServiceDescription, true); - zen::WriteFile(std::filesystem::path("/Library/LaunchDaemons") / (DaemonName + ".plist"), IoBuffer(PList.data(), PList.size())); + std::filesystem::path PListPath = std::filesystem::path("/Library/LaunchDaemons") / (DaemonName + ".plist"); + ZEN_INFO("Writing launchd plist to {}", PListPath.string()); + zen::WriteFile(PListPath, IoBuffer(IoBuffer::Wrap, PList.data(), PList.size())); + ZEN_INFO("Changing permissions to 0555 for {}", PListPath.string()); + if (chmod(PListPath.c_str(), 0555) == -1) + { + return MakeErrorCodeFromLastError(); + } return {}; } |