Prechádzať zdrojové kódy

LibCore: Add a standard path for runtime communication files

This corresponds to XDG_RUNTIME_DIR, which is the path applications may
place runtime communication files, like local sockets.
Timothy Flynn 2 rokov pred
rodič
commit
c46c3555a1

+ 22 - 0
Userland/Libraries/LibCore/StandardPaths.cpp

@@ -9,6 +9,7 @@
 #include <AK/Platform.h>
 #include <AK/Platform.h>
 #include <AK/StringBuilder.h>
 #include <AK/StringBuilder.h>
 #include <LibCore/StandardPaths.h>
 #include <LibCore/StandardPaths.h>
+#include <LibCore/System.h>
 #include <pwd.h>
 #include <pwd.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <unistd.h>
@@ -83,6 +84,27 @@ DeprecatedString StandardPaths::data_directory()
     return LexicalPath::canonicalized_path(builder.to_deprecated_string());
     return LexicalPath::canonicalized_path(builder.to_deprecated_string());
 }
 }
 
 
+ErrorOr<DeprecatedString> StandardPaths::runtime_directory()
+{
+    if (auto* data_directory = getenv("XDG_RUNTIME_DIR"))
+        return LexicalPath::canonicalized_path(data_directory);
+
+    StringBuilder builder;
+
+#if defined(AK_OS_SERENITY)
+    auto sid = TRY(Core::System::getsid());
+    builder.appendff("/tmp/session/{}", sid);
+#elif defined(AK_OS_MACOS)
+    builder.append(home_directory());
+    builder.append("/Library/Application Support"sv);
+#else
+    auto uid = getuid();
+    builder.appendff("/run/user/{}", uid);
+#endif
+
+    return LexicalPath::canonicalized_path(builder.to_deprecated_string());
+}
+
 DeprecatedString StandardPaths::tempfile_directory()
 DeprecatedString StandardPaths::tempfile_directory()
 {
 {
     return "/tmp";
     return "/tmp";

+ 2 - 0
Userland/Libraries/LibCore/StandardPaths.h

@@ -6,6 +6,7 @@
 
 
 #pragma once
 #pragma once
 
 
+#include <AK/Error.h>
 #include <AK/Forward.h>
 #include <AK/Forward.h>
 
 
 namespace Core {
 namespace Core {
@@ -19,6 +20,7 @@ public:
     static DeprecatedString tempfile_directory();
     static DeprecatedString tempfile_directory();
     static DeprecatedString config_directory();
     static DeprecatedString config_directory();
     static DeprecatedString data_directory();
     static DeprecatedString data_directory();
+    static ErrorOr<DeprecatedString> runtime_directory();
 };
 };
 
 
 }
 }