libxdg-basedir-1.2.0 1.2.0
|
Implementation of the XDG Base Directory specification. More...
#include <config.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <basedir.h>
#include <basedir_fs.h>
Go to the source code of this file.
Functions | |
static xdgCachedData * | xdgGetCache (xdgHandle *handle) |
Get cache object associated with a handle. | |
xdgHandle * | xdgInitHandle (xdgHandle *handle) |
Initialize a handle to an XDG data cache and initialize the cache. | |
static void | xdgFreeStringList (char **list) |
Free all memory used by a NULL-terminated string list. | |
static void | xdgFreeData (xdgCachedData *cache) |
Free all data in the cache and set pointers to null. | |
void | xdgWipeHandle (xdgHandle *handle) |
Wipe handle of XDG data cache. | |
static char ** | xdgSplitPath (const char *string) |
Split string at ':', return null-terminated list of resulting strings. | |
static char ** | xdgGetPathListEnv (const char *name, const char **defaults) |
Get $PATH-style environment variable as list of strings. | |
static char * | xdgGetEnv (const char *name) |
Get value of an environment variable. | |
static char * | xdgEnvDup (const char *name) |
Duplicate an environment variable. | |
static int | xdgUpdateHomeDirectories (xdgCachedData *cache) |
Update all *Home variables of cache. | |
static char ** | xdgGetDirectoryLists (const char *envname, char *homedir, const char **defaults) |
Get directory lists with initial home directory. | |
static int | xdgUpdateDirectoryLists (xdgCachedData *cache) |
Update all *Directories variables of cache. | |
int | xdgUpdateData (xdgHandle *handle) |
Update the data cache. | |
static char * | xdgFindExisting (const char *relativePath, const char *const *dirList) |
Find all existing files corresponding to relativePath relative to each item in dirList. | |
static FILE * | xdgFileOpen (const char *relativePath, const char *mode, const char *const *dirList) |
Open first possible config file corresponding to relativePath. | |
int | xdgMakePath (const char *path, mode_t mode) |
Create path by recursively creating directories. | |
static char * | xdgGetRelativeHome (const char *envname, const char *relativefallback, unsigned int fallbacklength) |
Get a home directory from the environment or a fallback relative to $HOME . | |
const char * | xdgDataHome (xdgHandle *handle) |
Base directory for user specific data files. | |
const char * | xdgConfigHome (xdgHandle *handle) |
Base directory for user specific configuration files. | |
const char *const * | xdgDataDirectories (xdgHandle *handle) |
Preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory. | |
const char *const * | xdgSearchableDataDirectories (xdgHandle *handle) |
Preference-ordered set of base directories to search for data files with $XDG_DATA_HOME prepended. | |
const char *const * | xdgConfigDirectories (xdgHandle *handle) |
Preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory. | |
const char *const * | xdgSearchableConfigDirectories (xdgHandle *handle) |
Preference-ordered set of base directories to search for configuration files with $XDG_CONFIG_HOME prepended. | |
const char * | xdgCacheHome (xdgHandle *handle) |
Base directory for user specific non-essential data files. | |
const char * | xdgRuntimeDirectory (xdgHandle *handle) |
Base directory for user specific non-essential runtime files such as sockets and named pipes. | |
char * | xdgDataFind (const char *relativePath, xdgHandle *handle) |
Find all existing data files corresponding to relativePath. | |
char * | xdgConfigFind (const char *relativePath, xdgHandle *handle) |
Find all existing config files corresponding to relativePath. | |
FILE * | xdgDataOpen (const char *relativePath, const char *mode, xdgHandle *handle) |
Open first possible data file corresponding to relativePath. | |
FILE * | xdgConfigOpen (const char *relativePath, const char *mode, xdgHandle *handle) |
Open first possible config file corresponding to relativePath. |
Implementation of the XDG Base Directory specification.
Definition in file basedir.c.
const char * xdgCacheHome | ( | xdgHandle * | handle | ) |
Base directory for user specific non-essential data files.
handle | Handle to data cache, initialized with xdgInitHandle(). |
const char *const * xdgConfigDirectories | ( | xdgHandle * | handle | ) |
Preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory.
handle | Handle to data cache, initialized with xdgInitHandle(). |
char * xdgConfigFind | ( | const char * | relativePath, |
xdgHandle * | handle ) |
Find all existing config files corresponding to relativePath.
Consider as performing
on every possible filename
and returning the successful filenames.
relativePath | Path to scan for. |
handle | Handle to data cache, initialized with xdgInitHandle(). |
const char * xdgConfigHome | ( | xdgHandle * | handle | ) |
Base directory for user specific configuration files.
handle | Handle to data cache, initialized with xdgInitHandle(). |
FILE * xdgConfigOpen | ( | const char * | relativePath, |
const char * | mode, | ||
xdgHandle * | handle ) |
Open first possible config file corresponding to relativePath.
Consider as performing
on every possible filename
and returning the first successful filename
or NULL
.
relativePath | Path to scan for. |
mode | Mode with which to attempt to open files (see fopen modes). |
handle | Handle to data cache, initialized with xdgInitHandle(). |
NULL
. Client must use fclose
to close file. const char *const * xdgDataDirectories | ( | xdgHandle * | handle | ) |
Preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory.
handle | Handle to data cache, initialized with xdgInitHandle(). |
char * xdgDataFind | ( | const char * | relativePath, |
xdgHandle * | handle ) |
Find all existing data files corresponding to relativePath.
Consider as performing
on every possible filename
and returning the successful filenames.
relativePath | Path to scan for. |
handle | Handle to data cache, initialized with xdgInitHandle(). |
const char * xdgDataHome | ( | xdgHandle * | handle | ) |
Base directory for user specific data files.
handle | Handle to data cache, initialized with xdgInitHandle(). |
FILE * xdgDataOpen | ( | const char * | relativePath, |
const char * | mode, | ||
xdgHandle * | handle ) |
Open first possible data file corresponding to relativePath.
Consider as performing
on every possible filename
and returning the first successful filename
or NULL
.
relativePath | Path to scan for. |
mode | Mode with which to attempt to open files (see fopen modes). |
handle | Handle to data cache, initialized with xdgInitHandle(). |
NULL
. Client must use fclose
to close file.
|
static |
|
static |
Open first possible config file corresponding to relativePath.
relativePath | Path to scan for. |
mode | Mode with which to attempt to open files (see fopen modes). |
dirList | NULL-terminated list of paths in which to search for relativePath. |
NULL
. Client must use fclose
to close file.
|
static |
Find all existing files corresponding to relativePath relative to each item in dirList.
relativePath | Relative path to search for. |
dirList | NULL-terminated list of directory paths. |
|
static |
Get directory lists with initial home directory.
envname | Environment variable with colon-seperated directories. |
homedir | Home directory for this directory list or NULL. This parameter should be allocated on the heap. The returned list will start with this path, and should be considered as owning the memory. |
defaults | Default directories if environment variable is not set. |
|
static |
|
static |
|
static |
Get a home directory from the environment or a fallback relative to $HOME
.
Sets errno
to ENOMEM
if unable to allocate duplicate string. Sets errno
to EINVAL
if variable is not set or empty.
envname | Name of environment variable. |
relativefallback | Path starting with "/" and relative to $HOME to use as fallback. |
fallbacklength | strlen(relativefallback) . |
NULL
of an error occurs. Initialize a handle to an XDG data cache and initialize the cache.
Use xdgWipeHandle() to free the handle.
int xdgMakePath | ( | const char * | path, |
mode_t | mode ) |
Create path by recursively creating directories.
This utility function is not part of the XDG specification, but nevertheless useful in context of directory manipulation.
path | The path to be created. |
mode | The permissions to use for created directories. This parameter is modified by the process's umask. For details, see mkdir(2)'s mode parameter. |
const char * xdgRuntimeDirectory | ( | xdgHandle * | handle | ) |
Base directory for user specific non-essential runtime files such as sockets and named pipes.
handle | Handle to data cache, initialized with xdgInitHandle(). |
const char *const * xdgSearchableConfigDirectories | ( | xdgHandle * | handle | ) |
Preference-ordered set of base directories to search for configuration files with $XDG_CONFIG_HOME prepended.
The base directory defined by $XDG_CONFIG_HOME is considered more important than any of the base directories defined by $XDG_CONFIG_DIRS.
handle | Handle to data cache, initialized with xdgInitHandle(). |
const char *const * xdgSearchableDataDirectories | ( | xdgHandle * | handle | ) |
Preference-ordered set of base directories to search for data files with $XDG_DATA_HOME prepended.
The base directory defined by $XDG_DATA_HOME is considered more important than any of the base directories defined by $XDG_DATA_DIRS.
handle | Handle to data cache, initialized with xdgInitHandle(). |
|
static |
int xdgUpdateData | ( | xdgHandle * | handle | ) |
Update the data cache.
This should not be done frequently as it reallocates the cache. Even if updating the cache fails the handle remains valid and can be used to access XDG data as it was before xdgUpdateData() was called.
|
static |
|
static |
void xdgWipeHandle | ( | xdgHandle * | handle | ) |
Wipe handle of XDG data cache.
Wipe handle initialized using xdgInitHandle().