sd_path_lookup, sd_path_lookup_strv — Query well-known file system paths
#include <systemd/sd-path.h>
enum {SD_PATH_TEMPORARY,SD_PATH_TEMPORARY_LARGE,SD_PATH_SYSTEM_BINARIES,SD_PATH_SYSTEM_INCLUDE,SD_PATH_SYSTEM_LIBRARY_PRIVATE,SD_PATH_SYSTEM_LIBRARY_ARCH,SD_PATH_SYSTEM_SHARED,SD_PATH_SYSTEM_CONFIGURATION_FACTORY,SD_PATH_SYSTEM_STATE_FACTORY,SD_PATH_SYSTEM_CONFIGURATION,SD_PATH_SYSTEM_RUNTIME,SD_PATH_SYSTEM_RUNTIME_LOGS,SD_PATH_SYSTEM_STATE_PRIVATE,SD_PATH_SYSTEM_STATE_LOGS,SD_PATH_SYSTEM_STATE_CACHE,SD_PATH_SYSTEM_STATE_SPOOL,SD_PATH_USER_BINARIES,SD_PATH_USER_LIBRARY_PRIVATE,SD_PATH_USER_LIBRARY_ARCH,SD_PATH_USER_SHARED,SD_PATH_USER_CONFIGURATION,SD_PATH_USER_RUNTIME,SD_PATH_USER_STATE_PRIVATE,SD_PATH_USER_STATE_CACHE,SD_PATH_USER,SD_PATH_USER_DOCUMENTS,SD_PATH_USER_MUSIC,SD_PATH_USER_PICTURES,SD_PATH_USER_VIDEOS,SD_PATH_USER_DOWNLOAD,SD_PATH_USER_PUBLIC,SD_PATH_USER_TEMPLATES,SD_PATH_USER_DESKTOP,SD_PATH_SEARCH_BINARIES,SD_PATH_SEARCH_BINARIES_DEFAULT,SD_PATH_SEARCH_LIBRARY_PRIVATE,SD_PATH_SEARCH_LIBRARY_ARCH,SD_PATH_SEARCH_SHARED,SD_PATH_SEARCH_CONFIGURATION_FACTORY,SD_PATH_SEARCH_STATE_FACTORY,SD_PATH_SEARCH_CONFIGURATION,SD_PATH_SYSTEMD_UTIL,SD_PATH_SYSTEMD_SYSTEM_UNIT,SD_PATH_SYSTEMD_SYSTEM_PRESET,SD_PATH_SYSTEMD_USER_UNIT,SD_PATH_SYSTEMD_USER_PRESET,SD_PATH_SYSTEMD_SYSTEM_CONF,SD_PATH_SYSTEMD_USER_CONF,SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT,SD_PATH_SYSTEMD_SEARCH_USER_UNIT,SD_PATH_SYSTEMD_SYSTEM_GENERATOR,SD_PATH_SYSTEMD_USER_GENERATOR,SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR,SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR,SD_PATH_SYSTEMD_SLEEP,SD_PATH_SYSTEMD_SHUTDOWN,SD_PATH_TMPFILES,SD_PATH_SYSUSERS,SD_PATH_SYSCTL,SD_PATH_BINFMT,SD_PATH_MODULES_LOAD,SD_PATH_CATALOG,SD_PATH_SYSTEMD_SEARCH_NETWORK,SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR,SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR,SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR,SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR, };
int sd_path_lookup( | uint64_t type, |
| const char *suffix, | |
char **paths); |
int sd_path_lookup_strv( | uint64_t type, |
| const char *suffix, | |
char ***paths); |
sd_path_lookup() and sd_bus_path_lookup_strv() return a
single path or set of file system paths specified by the argument type. In case of
sd_path_lookup() a single NUL-terminated string is returned.
When type specifies a set of paths, they are concatenated using
":" as a separator (as is traditionally done for e.g. $PATH or
$LD_LIBRARY_PATH). In case of sd_path_lookup_strv() a
NULL-terminated array of strings is returned (strv). If suffix
suffix is given, it is concatenated to each of the paths after a slash
("/"). All returned paths are absolute.
For paths which refer to user directories, the relevant XDG standard is followed, with support for
environment variables like $XDG_DOCUMENTS_DIR, $XDG_DESKTOP_DIR,
..., and explicit configuration in /etc/xdg/user-dirs.conf or
${XDG_CONFIG_HOME}/user-dirs.dirs. See
XDG Base Directory Specification for details.
systemd-path(1) is
a wrapper around sd_path_lookup() and allows the same set of paths to be queried.
On success, sd_path_lookup() and sd_path_lookup_strv()
return a non-negative integer. On failure, a negative errno-style error number is returned by either
function.
The returned string or string array (strv) must be free(3)'d by the caller.
/* SPDX-License-Identifier: MIT-0 */
#include <stdio.h>
#include <stdlib.h>
#include <systemd/sd-path.h>
int main(void) {
int r;
char *t;
r = sd_path_lookup(SD_PATH_USER_DOCUMENTS, NULL, &t);
if (r < 0)
return EXIT_FAILURE;
printf("~/Documents: %s\n", t);
free(t);
return EXIT_SUCCESS;
}
Note that the default answer of $HOME/Documents may be
overridden by user-dirs.conf or
$XDG_DOCUMENTS_DIR.
Functions described here are available as a shared
library, which can be compiled against and linked to with the
libsystemd pkg-config(1)
file.
The code described here uses
getenv(3),
which is declared to be not multi-thread-safe. This means that the code calling the functions described
here must not call
setenv(3)
from a parallel thread. It is recommended to only do calls to setenv()
from an early phase of the program when no other threads have been started.