aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/service.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-08-28 12:55:33 +0200
committerDan Engelbrecht <[email protected]>2024-09-18 10:43:36 +0200
commitf8398bea9f3b5e7ccd1ba4134fa75976da8b7545 (patch)
tree10a79211117a6ff416b4e6867af73ace9a7a6656 /src/zenutil/service.cpp
parentmore WIP (diff)
downloadzen-f8398bea9f3b5e7ccd1ba4134fa75976da8b7545.tar.xz
zen-f8398bea9f3b5e7ccd1ba4134fa75976da8b7545.zip
launchd plist install
Diffstat (limited to 'src/zenutil/service.cpp')
-rw-r--r--src/zenutil/service.cpp19
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 {};
}