/* * Copyright 2010 Vincent Sanders * * This file is part of NetSurf, http://www.netsurf-browser.org/ * * NetSurf is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * NetSurf is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * @file utils/filepath.h * @brief Utility routines to obtain paths to file resources. */ #ifndef _NETSURF_UTILS_FILEPATH_H_ #define _NETSURF_UTILS_FILEPATH_H_ #include #include "utils/errors.h" /** * Create a normalised file name. * * If the file described by the format exists and is accessible the * normalised path is placed in str and a pointer to str returned * otherwise NULL is returned. The string in str is always modified. * * @param str A buffer to contain the normalised file name must be at * least PATH_MAX bytes long. * @param format A printf format for the filename. * @param ap The list of arguments for the format. * @return A pointer to the expanded filename or NULL if the file is * not present or accessible. */ char *filepath_vsfindfile(char *str, const char *format, va_list ap); /** * Create a normalised file name. * * Similar to vsfindfile but takes variadic (printf like) parameters */ char *filepath_sfindfile(char *str, const char *format, ...); /** * Create a normalised file name. * * Similar to sfindfile but allocates its own storage for the * returned string. The caller must free this sorage. */ char *filepath_findfile(const char *format, ...); /** * Searches an array of resource paths for a file. * * Iterates through a vector of resource paths and returns the * normalised file name of the first acessible file or NULL if no file * can be found in any of the resource paths. * * \param respathv The resource path vector to iterate. * \param filepath The buffer to place the result in. * \param filename The filename of the resource to search for. * \return A pointer to filepath if a target is found or NULL if not. */ char *filepath_sfind(char **respathv, char *filepath, const char *filename); /** * Searches an array of resource paths for a file. * * Similar to filepath_sfind except it allocates its own storage for * the returned string. The caller must free this sorage. */ char *filepath_find(char **respathv, const char *filename); /** * Searches an array of resource paths for a file optionally forcing a default. * * Similar to filepath_sfind except if no resource is found the default * is used as an additional path element to search, if that still * fails the returned path is set to the concatination of the default * path and the filename. * * \param respathv The resource path vector to iterate. * \param filepath The buffer to place the result in. Must have space for PATH_MAX bytes. * \param filename The filename of the resource to search for. * \param def The default path to use * \return A pointer to filepath if a target is found or the default if not */ char *filepath_sfinddef(char **respathv, char *filepath, const char *filename, const char *def); /** * Merge two string vectors into a resource search path vector. * * @param pathv A string vector containing path elemets to scan. * @param langv A string vector containing language names to enumerate. * @return A pointer to a NULL terminated string vector of valid * resource directories. */ char **filepath_generate(char * const *pathv, const char * const *langv); /** * Convert a colon separated list of path elements into a string vector. * * @param path A colon separated path. * @return A pointer to a NULL terminated string vector of valid * resource directories. */ char **filepath_path_to_strvec(const char *path); /** * Free a string vector. * * Free a string vector allocated by filepath_path_to_strvec */ void filepath_free_strvec(char **pathv); #endif /* _NETSURF_UTILS_FILEPATH_H_ */