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.
This commit is contained in:
Sam Atkins 2024-09-30 10:39:07 +01:00 committed by Andreas Kling
commit 1217e7733f
Notes: github-actions[bot] 2024-10-01 09:04:14 +00:00
2 changed files with 14 additions and 4 deletions

View file

@ -152,6 +152,16 @@ ByteString StandardPaths::user_data_directory()
return LexicalPath::canonicalized_path(builder.to_byte_string());
}
Vector<ByteString> 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<ByteString> paths;
data_directories.for_each_split_view(':', SplitBehavior::Nothing, [&paths](auto data_directory) {
paths.append(LexicalPath::canonicalized_path(data_directory));
});
return paths;
}
ErrorOr<ByteString> 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<Vector<String>> 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<void> {
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

View file

@ -24,6 +24,7 @@ public:
static ByteString tempfile_directory();
static ByteString config_directory();
static ByteString user_data_directory();
static Vector<ByteString> system_data_directories();
static ErrorOr<ByteString> runtime_directory();
static ErrorOr<Vector<String>> font_directories();
};