diff options
Diffstat (limited to 'framebuffer/fb_findfile.c')
-rw-r--r-- | framebuffer/fb_findfile.c | 116 |
1 files changed, 66 insertions, 50 deletions
diff --git a/framebuffer/fb_findfile.c b/framebuffer/fb_findfile.c index 2e0397e15..acfed41ca 100644 --- a/framebuffer/fb_findfile.c +++ b/framebuffer/fb_findfile.c @@ -23,65 +23,81 @@ #include <stdlib.h> #include <string.h> +#include "utils/log.h" + #include "fb_findfile.h" -static bool -fb_findfile_exists(char *buffer, const char *base, const char *filename) +char *path_to_url(const char *path) { - if (base == NULL) - return false; - - if (*base == '~') { - snprintf(buffer, PATH_MAX, "%s/%s/%s", - getenv("HOME") ? getenv("HOME") : "", - base + 1, filename); - } else { - snprintf(buffer, PATH_MAX, "%s/%s", base, filename); - } - - return (access(buffer, R_OK) == 0); -} + char *r = malloc(strlen(path) + 7 + 1); -char * -fb_findfile(const char *filename) -{ - static char buffer[PATH_MAX]; - - /* Search sequence is: - * home/filename - * res-env/filename - * resources/filename - */ - - if (fb_findfile_exists(buffer, NETSURF_FB_HOMEPATH, filename)) - return buffer; - if (fb_findfile_exists(buffer, getenv("NETSURF_RES"), filename)) - return buffer; - if (fb_findfile_exists(buffer, NETSURF_FB_RESPATH, filename)) - return buffer; - - return NULL; + strcpy(r, "file://"); + strcat(r, path); + + return r; } -char * -fb_findfile_asurl(const char *filename) +/** + * Locate a shared resource file by searching known places in order. + * + * \param buf buffer to write to. must be at least PATH_MAX chars + * \param filename file to look for + * \param def default to return if file not found + * \return buf + * + * Search order is: ~/.netsurf/, $NETSURFRES/ (where NETSURFRES is an + * environment variable), and finally the path specified by NETSURF_FB_RESPATH + * from the Makefile + */ + +char *fb_find_resource(char *buf, const char *filename, const char *def) { - static char buffer[PATH_MAX]; - char *f; - - if (strncmp(filename, "http://", 5) == 0) - return strdup(filename); - - f = fb_findfile(filename); - - if (f == NULL) - return NULL; - - snprintf(buffer, PATH_MAX, "file://%s", f); - - return strdup(buffer); + char *cdir = getenv("HOME"); + char t[PATH_MAX]; + + if (cdir != NULL) { + strcpy(t, cdir); + strcat(t, "/.netsurf/"); + strcat(t, filename); + if (realpath(t, buf) != NULL) { + if (access(buf, R_OK) == 0) + return buf; + } + } + + cdir = getenv("NETSURFRES"); + + if (cdir != NULL) { + if (realpath(cdir, buf) != NULL) { + strcat(buf, "/"); + strcat(buf, filename); + if (access(buf, R_OK) == 0) + return buf; + } + } + + strcpy(t, NETSURF_FB_RESPATH); + strcat(t, filename); + if (realpath(t, buf) != NULL) { + if (access(buf, R_OK) == 0) + return buf; + } + + if (def[0] == '~') { + snprintf(t, PATH_MAX, "%s%s", getenv("HOME"), def + 1); + if (realpath(t, buf) == NULL) { + strcpy(buf, t); + } + } else { + if (realpath(def, buf) == NULL) { + strcpy(buf, def); + } + } + + return buf; } + /* * Local Variables: * c-basic-offset: 8 |