From 69778e29457cc0fbe65361e0db460908b89a8459 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 24 Jan 2014 08:39:01 +0000 Subject: move framebuffer fetch operations to their own module --- framebuffer/Makefile.target | 2 +- framebuffer/fetch.c | 186 ++++++++++++++++++++++++++++++++++++++++++++ framebuffer/fetch.h | 25 ++++++ framebuffer/filetype.c | 61 --------------- framebuffer/filetype.h | 25 ------ framebuffer/findfile.c | 68 ---------------- framebuffer/findfile.h | 4 - framebuffer/gui.c | 49 +----------- 8 files changed, 214 insertions(+), 206 deletions(-) create mode 100644 framebuffer/fetch.c create mode 100644 framebuffer/fetch.h delete mode 100644 framebuffer/filetype.c delete mode 100644 framebuffer/filetype.h (limited to 'framebuffer') diff --git a/framebuffer/Makefile.target b/framebuffer/Makefile.target index 58a504b17..0ce796be0 100644 --- a/framebuffer/Makefile.target +++ b/framebuffer/Makefile.target @@ -135,7 +135,7 @@ $(eval $(foreach V,$(filter FB_IMAGE_%,$(.VARIABLES)),$(call convert_image,$($(V # S_FRAMEBUFFER are sources purely for the framebuffer build S_FRAMEBUFFER := gui.c framebuffer.c schedule.c \ - thumbnail.c misc.c bitmap.c filetype.c findfile.c \ + thumbnail.c misc.c bitmap.c fetch.c findfile.c \ localhistory.c clipboard.c S_FRAMEBUFFER_FBTK := fbtk.c event.c fill.c bitmap.c user.c window.c \ diff --git a/framebuffer/fetch.c b/framebuffer/fetch.c new file mode 100644 index 000000000..2e304c222 --- /dev/null +++ b/framebuffer/fetch.c @@ -0,0 +1,186 @@ +/* + * Copyright 2014 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 + * Interfaces for fetch table. + */ + +#include +#include + +#include "desktop/gui.h" +#include "utils/url.h" +#include "utils/log.h" +#include "utils/filepath.h" + +#include "framebuffer/findfile.h" +#include "framebuffer/fetch.h" + +/** + * Return the filename part of a full path + * + * \param path full path and filename + * \return filename (will be freed with free()) + */ +static char *filename_from_path(char *path) +{ + char *leafname; + + leafname = strrchr(path, '/'); + if (!leafname) + leafname = path; + else + leafname += 1; + + return strdup(leafname); +} + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ +static bool path_add_part(char *path, int length, const char *newpart) +{ + if(path[strlen(path) - 1] != '/') + strncat(path, "/", length); + + strncat(path, newpart, length); + + return true; +} + +char *path_to_url(const char *path) +{ + int urllen; + char *url; + + if (path == NULL) + return NULL; + + urllen = strlen(path) + FILE_SCHEME_PREFIX_LEN + 1; + url = malloc(urllen); + + if (*path == '/') { + path++; /* file: paths are already absolute */ + } + + snprintf(url, urllen, "%s%s", FILE_SCHEME_PREFIX, path); + + return url; +} + + +char *url_to_path(const char *url) +{ + char *path; + char *respath; + url_func_result res; /* result from url routines */ + + res = url_path(url, &path); + if (res != URL_FUNC_OK) { + return NULL; + } + + res = url_unescape(path, &respath); + free(path); + if (res != URL_FUNC_OK) { + return NULL; + } + + return respath; +} + +/** + * Translate resource to full url. + * + * Transforms a resource: path into a full URL. The returned URL + * is used as the target for a redirect. The caller takes ownership of + * the returned nsurl including unrefing it when finished with it. + * + * \param path The path of the resource to locate. + * \return A string containing the full URL of the target object or + * NULL if no suitable resource can be found. + */ +static nsurl *get_resource_url(const char *path) +{ + char buf[PATH_MAX]; + char *raw; + nsurl *url = NULL; + + if (strcmp(path, "favicon.ico") == 0) + path = "favicon.png"; + + raw = path_to_url(filepath_sfind(respaths, buf, path)); + if (raw != NULL) { + nsurl_create(raw, &url); + free(raw); + } + + return url; +} + +/** + * filetype -- determine the MIME type of a local file + */ +static const char *fetch_filetype(const char *unix_path) +{ + int l; + LOG(("unix path %s", unix_path)); + l = strlen(unix_path); + if (2 < l && strcasecmp(unix_path + l - 3, "css") == 0) + return "text/css"; + if (2 < l && strcasecmp(unix_path + l - 3, "f79") == 0) + return "text/css"; + if (2 < l && strcasecmp(unix_path + l - 3, "jpg") == 0) + return "image/jpeg"; + if (3 < l && strcasecmp(unix_path + l - 4, "jpeg") == 0) + return "image/jpeg"; + if (2 < l && strcasecmp(unix_path + l - 3, "gif") == 0) + return "image/gif"; + if (2 < l && strcasecmp(unix_path + l - 3, "png") == 0) + return "image/png"; + if (2 < l && strcasecmp(unix_path + l - 3, "b60") == 0) + return "image/png"; + if (2 < l && strcasecmp(unix_path + l - 3, "jng") == 0) + return "image/jng"; + if (2 < l && strcasecmp(unix_path + l - 3, "svg") == 0) + return "image/svg"; + return "text/html"; +} + + +static char *fetch_mimetype(const char *ro_path) +{ + return strdup("text/plain"); +} + +/* table for fetch operations */ +static struct gui_fetch_table fetch_table = { + .filename_from_path = filename_from_path, + .path_add_part = path_add_part, + .filetype = fetch_filetype, + + .get_resource_url = get_resource_url, + .mimetype = fetch_mimetype, +}; + +struct gui_fetch_table *framebuffer_fetch_table = &fetch_table; diff --git a/framebuffer/fetch.h b/framebuffer/fetch.h new file mode 100644 index 000000000..718b08300 --- /dev/null +++ b/framebuffer/fetch.h @@ -0,0 +1,25 @@ +/* + * Copyright 2014 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 . + */ + + +#ifndef NETSURF_FB_FETCH_H +#define NETSURF_FB_FETCH_H + +struct gui_fetch_table *framebuffer_fetch_table; + +#endif diff --git a/framebuffer/filetype.c b/framebuffer/filetype.c deleted file mode 100644 index ce71e337a..000000000 --- a/framebuffer/filetype.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2003 James Bursa - * - * 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 . - */ - -#include -#include -#include "content/fetch.h" -#include "utils/log.h" -#include "utils/utils.h" - -#include "framebuffer/filetype.h" - -/** - * filetype -- determine the MIME type of a local file - */ - -const char *fetch_filetype(const char *unix_path) -{ - int l; - LOG(("unix path %s", unix_path)); - l = strlen(unix_path); - if (2 < l && strcasecmp(unix_path + l - 3, "css") == 0) - return "text/css"; - if (2 < l && strcasecmp(unix_path + l - 3, "f79") == 0) - return "text/css"; - if (2 < l && strcasecmp(unix_path + l - 3, "jpg") == 0) - return "image/jpeg"; - if (3 < l && strcasecmp(unix_path + l - 4, "jpeg") == 0) - return "image/jpeg"; - if (2 < l && strcasecmp(unix_path + l - 3, "gif") == 0) - return "image/gif"; - if (2 < l && strcasecmp(unix_path + l - 3, "png") == 0) - return "image/png"; - if (2 < l && strcasecmp(unix_path + l - 3, "b60") == 0) - return "image/png"; - if (2 < l && strcasecmp(unix_path + l - 3, "jng") == 0) - return "image/jng"; - if (2 < l && strcasecmp(unix_path + l - 3, "svg") == 0) - return "image/svg"; - return "text/html"; -} - - -char *fetch_mimetype(const char *ro_path) -{ - return strdup("text/plain"); -} diff --git a/framebuffer/filetype.h b/framebuffer/filetype.h deleted file mode 100644 index d11aacb5b..000000000 --- a/framebuffer/filetype.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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 . - */ - -#ifndef NETSURF_FB_FILETYPE_H -#define NETSURF_FB_FILETYPE_H - -const char *fetch_filetype(const char *unix_path); -char *fetch_mimetype(const char *ro_path); - -#endif diff --git a/framebuffer/findfile.c b/framebuffer/findfile.c index 821a66305..67312f452 100644 --- a/framebuffer/findfile.c +++ b/framebuffer/findfile.c @@ -16,19 +16,9 @@ * along with this program. If not, see . */ -#include -#include -#include #include -#include -#include - -#include #include "utils/filepath.h" -#include "utils/log.h" -#include "utils/url.h" -#include "desktop/gui.h" #include "framebuffer/findfile.h" @@ -57,64 +47,6 @@ fb_init_resource(const char *resource_path) } -char *path_to_url(const char *path) -{ - int urllen; - char *url; - - if (path == NULL) - return NULL; - - urllen = strlen(path) + FILE_SCHEME_PREFIX_LEN + 1; - url = malloc(urllen); - - if (*path == '/') { - path++; /* file: paths are already absolute */ - } - - snprintf(url, urllen, "%s%s", FILE_SCHEME_PREFIX, path); - - return url; -} - - -char *url_to_path(const char *url) -{ - char *path; - char *respath; - url_func_result res; /* result from url routines */ - - res = url_path(url, &path); - if (res != URL_FUNC_OK) { - return NULL; - } - - res = url_unescape(path, &respath); - free(path); - if (res != URL_FUNC_OK) { - return NULL; - } - - return respath; -} - -nsurl *gui_get_resource_url(const char *path) -{ - char buf[PATH_MAX]; - char *raw; - nsurl *url = NULL; - - if (strcmp(path, "favicon.ico") == 0) - path = "favicon.png"; - - raw = path_to_url(filepath_sfind(respaths, buf, path)); - if (raw != NULL) { - nsurl_create(raw, &url); - free(raw); - } - - return url; -} /* * Local Variables: diff --git a/framebuffer/findfile.h b/framebuffer/findfile.h index ca40c7751..1f3db6eb1 100644 --- a/framebuffer/findfile.h +++ b/framebuffer/findfile.h @@ -19,8 +19,6 @@ #ifndef NETSURF_FB_FINDFILE_H #define NETSURF_FB_FINDFILE_H -#include "utils/nsurl.h" - extern char **respaths; /** Create an array of valid paths to search for resources. @@ -31,6 +29,4 @@ extern char **respaths; */ char **fb_init_resource(const char *resource_path); -nsurl *gui_get_resource_url(const char *path); - #endif /* NETSURF_FB_FINDFILE_H */ diff --git a/framebuffer/gui.c b/framebuffer/gui.c index 82af56d9e..e7f456d8b 100644 --- a/framebuffer/gui.c +++ b/framebuffer/gui.c @@ -55,7 +55,7 @@ #include "framebuffer/image_data.h" #include "framebuffer/font.h" #include "framebuffer/clipboard.h" -#include "framebuffer/filetype.h" +#include "framebuffer/fetch.h" #include "content/urldb.h" #include "desktop/local_history.h" @@ -1768,43 +1768,6 @@ gui_window_remove_caret(struct gui_window *g) } } -/** - * Return the filename part of a full path - * - * \param path full path and filename - * \return filename (will be freed with free()) - */ -static char *filename_from_path(char *path) -{ - char *leafname; - - leafname = strrchr(path, '/'); - if (!leafname) - leafname = path; - else - leafname += 1; - - return strdup(leafname); -} - -/** - * Add a path component/filename to an existing path - * - * \param path buffer containing path + free space - * \param length length of buffer "path" - * \param newpart string containing path component to add to path - * \return true on success - */ - -static bool path_add_part(char *path, int length, const char *newpart) -{ - if(path[strlen(path) - 1] != '/') - strncat(path, "/", length); - - strncat(path, newpart, length); - - return true; -} static struct gui_window_table framebuffer_window_table = { .create = gui_window_create, @@ -1825,14 +1788,6 @@ static struct gui_window_table framebuffer_window_table = { .stop_throbber = gui_window_stop_throbber, }; -static struct gui_fetch_table framebuffer_fetch_table = { - .filename_from_path = filename_from_path, - .path_add_part = path_add_part, - .filetype = fetch_filetype, - - .get_resource_url = gui_get_resource_url, - .mimetype = fetch_mimetype, -}; static struct gui_browser_table framebuffer_browser_table = { .poll = gui_poll, @@ -1859,7 +1814,7 @@ main(int argc, char** argv) .browser = &framebuffer_browser_table, .window = &framebuffer_window_table, .clipboard = framebuffer_clipboard_table, - .fetch = &framebuffer_fetch_table, + .fetch = framebuffer_fetch_table, }; respaths = fb_init_resource(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH); -- cgit v1.2.3