From 1217e7733f70f44f6832b6a22dae6bb5425182fc Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 30 Sep 2024 10:39:07 +0100 Subject: [PATCH] LibCore: Add StandardPaths::system_data_directories() This is only used for finding font directories for now, but having a convenient function for it means if anyone needs to use XDG_DATA_DIRS in future, they're less likely to implement it themselves and miss the case of it being present but empty. We also now canonicalize the data directory paths, as we do for the other standard paths. --- Userland/Libraries/LibCore/StandardPaths.cpp | 17 +++++++++++++---- Userland/Libraries/LibCore/StandardPaths.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibCore/StandardPaths.cpp b/Userland/Libraries/LibCore/StandardPaths.cpp index 35ebee7cdca..822cf617b89 100644 --- a/Userland/Libraries/LibCore/StandardPaths.cpp +++ b/Userland/Libraries/LibCore/StandardPaths.cpp @@ -152,6 +152,16 @@ ByteString StandardPaths::user_data_directory() return LexicalPath::canonicalized_path(builder.to_byte_string()); } +Vector StandardPaths::system_data_directories() +{ + auto data_directories = get_environment_if_not_empty("XDG_DATA_DIRS"sv).value_or("/usr/local/share:/usr/share"sv); + Vector paths; + data_directories.for_each_split_view(':', SplitBehavior::Nothing, [&paths](auto data_directory) { + paths.append(LexicalPath::canonicalized_path(data_directory)); + }); + return paths; +} + ErrorOr StandardPaths::runtime_directory() { if (auto data_directory = get_environment_if_not_empty("XDG_RUNTIME_DIR"sv); data_directory.has_value()) @@ -225,12 +235,11 @@ ErrorOr> StandardPaths::font_directories() # endif } }; # if !(defined(AK_OS_SERENITY) || defined(AK_OS_MACOS)) - auto data_directories = get_environment_if_not_empty("XDG_DATA_DIRS"sv).value_or("/usr/local/share:/usr/share"sv); - TRY(data_directories.for_each_split_view(':', SplitBehavior::Nothing, [&paths](auto data_directory) -> ErrorOr { + auto data_directories = system_data_directories(); + for (auto& data_directory : data_directories) { paths.append(TRY(String::formatted("{}/fonts"sv, data_directory))); paths.append(TRY(String::formatted("{}/X11/fonts"sv, data_directory))); - return {}; - })); + } # endif return paths; #endif diff --git a/Userland/Libraries/LibCore/StandardPaths.h b/Userland/Libraries/LibCore/StandardPaths.h index cd358864e2c..85f21afadf3 100644 --- a/Userland/Libraries/LibCore/StandardPaths.h +++ b/Userland/Libraries/LibCore/StandardPaths.h @@ -24,6 +24,7 @@ public: static ByteString tempfile_directory(); static ByteString config_directory(); static ByteString user_data_directory(); + static Vector system_data_directories(); static ErrorOr runtime_directory(); static ErrorOr> font_directories(); };