Example #1
0
/** Free all data in the cache and set pointers to null. */
static void xdgFreeData(xdgCachedData *cache)
{
	if (cache->dataHome);
	{
		/* the first element of the directory lists is usually the home directory */
		if (cache->searchableDataDirectories && cache->searchableDataDirectories[0] != cache->dataHome)
			free(cache->dataHome);
		cache->dataHome = 0;
	}
	if (cache->configHome);
	{
		if (cache->searchableConfigDirectories && cache->searchableConfigDirectories[0] != cache->configHome)
			free(cache->configHome);
		cache->configHome = 0;
	}
	if (cache->cacheHome)
	{
		free(cache->cacheHome);
		cache->cacheHome = 0;
	}
	xdgFreeStringList(cache->searchableDataDirectories);
	cache->searchableDataDirectories = 0;
	xdgFreeStringList(cache->searchableConfigDirectories);
	cache->searchableConfigDirectories = 0;
}
Example #2
0
/** Update all *Directories variables of cache.
 * This includes xdgCachedData::searchableDataDirectories and xdgCachedData::searchableConfigDirectories.
 * @param cache Data cache to be updated.
 */
static int xdgUpdateDirectoryLists(xdgCachedData* cache)
{
	char** itemlist;
	int size;

	itemlist = xdgGetPathListEnv("XDG_DATA_DIRS", DefaultDataDirectoriesList);

	if (!itemlist) return FALSE;
	for (size = 0; itemlist[size]; size++) ; /* Get list size */
	if (!(cache->searchableDataDirectories = (char**)malloc(sizeof(char*)*(size+2))))
	{
		xdgFreeStringList(itemlist);
		return FALSE;
	}
	/* "home" directory has highest priority according to spec */
	cache->searchableDataDirectories[0] = cache->dataHome;
	memcpy(&(cache->searchableDataDirectories[1]), itemlist, sizeof(char*)*(size+1));
	free(itemlist);
	
	itemlist = xdgGetPathListEnv("XDG_CONFIG_DIRS", DefaultConfigDirectoriesList);
	if (!itemlist) return FALSE;
	for (size = 0; itemlist[size]; size++) ; /* Get list size */
	if (!(cache->searchableConfigDirectories = (char**)malloc(sizeof(char*)*(size+2))))
	{
		xdgFreeStringList(itemlist);
		return FALSE;
	}
	cache->searchableConfigDirectories[0] = cache->configHome;
	memcpy(&(cache->searchableConfigDirectories[1]), itemlist, sizeof(char*)*(size+1));
	free(itemlist);

	return TRUE;
}
Example #3
0
FILE * xdgConfigOpen(const char * relativePath, const char * mode, xdgHandle *handle)
{
	const char * const * dirs = xdgSearchableConfigDirectories(handle);
	FILE * result = xdgFileOpen(relativePath, mode, dirs);
	if (!handle) xdgFreeStringList((char**)dirs);
	return result;
}
Example #4
0
char * xdgConfigFind(const char * relativePath, xdgHandle *handle)
{
	const char * const * dirs = xdgSearchableConfigDirectories(handle);
	char * result = xdgFindExisting(relativePath, dirs);
	if (!handle) xdgFreeStringList((char**)dirs);
	return result;
}