summaryrefslogtreecommitdiff
path: root/framebuffer
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2014-01-24 08:39:01 +0000
committerVincent Sanders <vince@kyllikki.org>2014-01-24 08:39:01 +0000
commit69778e29457cc0fbe65361e0db460908b89a8459 (patch)
tree526b262ceed14462dd2813bd1533e7ee89863956 /framebuffer
parent233904c7ed17002b434aa9c312976f2d4dfc08d9 (diff)
downloadnetsurf-69778e29457cc0fbe65361e0db460908b89a8459.tar.gz
netsurf-69778e29457cc0fbe65361e0db460908b89a8459.tar.bz2
move framebuffer fetch operations to their own module
Diffstat (limited to 'framebuffer')
-rw-r--r--framebuffer/Makefile.target2
-rw-r--r--framebuffer/fetch.c186
-rw-r--r--framebuffer/fetch.h (renamed from framebuffer/filetype.h)8
-rw-r--r--framebuffer/filetype.c61
-rw-r--r--framebuffer/findfile.c68
-rw-r--r--framebuffer/findfile.h4
-rw-r--r--framebuffer/gui.c49
7 files changed, 193 insertions, 185 deletions
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 <vince@netsurf-browser.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * Interfaces for fetch table.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#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/filetype.h b/framebuffer/fetch.h
index d11aacb5b..718b08300 100644
--- a/framebuffer/filetype.h
+++ b/framebuffer/fetch.h
@@ -16,10 +16,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#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);
+#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 <bursa@users.sourceforge.net>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#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/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 <http://www.gnu.org/licenses/>.
*/
-#include <limits.h>
-#include <unistd.h>
-#include <stdbool.h>
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <curl/curl.h>
#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);