summaryrefslogtreecommitdiff
path: root/amiga/fs_backing_store.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-11-22 16:41:29 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-11-22 16:41:29 +0000
commit0cd682644ba8a0bc566aa378ca5374c9663f8562 (patch)
tree8c4c2508a0d3442fa0158ec8927cb0dc689c3339 /amiga/fs_backing_store.c
parent71cdc991c798e935145b25c4d9df57d19bb05f17 (diff)
downloadnetsurf-0cd682644ba8a0bc566aa378ca5374c9663f8562.tar.gz
netsurf-0cd682644ba8a0bc566aa378ca5374c9663f8562.tar.bz2
Revert "Revert "Write out to the backing store asynchronously.""
This reverts commit 75623179aa7a0259477ef93dcd2a3562c4884c74.
Diffstat (limited to 'amiga/fs_backing_store.c')
-rw-r--r--amiga/fs_backing_store.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/amiga/fs_backing_store.c b/amiga/fs_backing_store.c
new file mode 100644
index 000000000..94ab6cc61
--- /dev/null
+++ b/amiga/fs_backing_store.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2014 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ *
+ * 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 <proto/dos.h>
+#include <proto/exec.h>
+
+#include "content/fs_backing_store.c"
+
+struct ami_backing_store_write {
+ nsurl *url;
+ enum backing_store_flags flags;
+ uint8_t *data;
+ size_t datalen;
+};
+
+
+static int32 ami_backing_store_write_process(STRPTR args, int32 length, APTR execbase)
+{
+ struct Process *proc = (struct Process *)FindTask(NULL);
+ struct ami_backing_store_write *absw = proc->pr_Task.tc_UserData;
+
+ filesystem_llcache_table->store(absw->url, absw->flags, absw->data, absw->datalen);
+ FreeVec(absw);
+
+ return RETURN_OK;
+}
+
+
+/**
+ * Place an object in the backing store.
+ * This implementation starts a new process and calls the core routine.
+ *
+ * @param url The url is used as the unique primary key for the data.
+ * @param flags The flags to control how the object is stored.
+ * @param data The objects source data.
+ * @param datalen The length of the \a data.
+ * @return NSERROR_OK on success or error code on faliure.
+ */
+static nserror
+ami_backing_store_store(nsurl *url,
+ enum backing_store_flags flags,
+ const uint8_t *data,
+ const size_t datalen)
+{
+ struct ami_backing_store_write *absw =
+ AllocVecTagList(sizeof(struct ami_backing_store_write), NULL);
+
+ if(absw == NULL) return NSERROR_NOMEM;
+
+ absw->url = url;
+ absw->flags = flags;
+ absw->data = (uint8_t *)data;
+ absw->datalen = datalen;
+
+ struct Process *proc = CreateNewProcTags(
+ NP_Name, "NetSurf backing store write process",
+ NP_Entry, ami_backing_store_write_process,
+ NP_Child, TRUE,
+ NP_StackSize, 16384,
+ NP_Priority, -1,
+ NP_UserData, absw,
+ TAG_DONE);
+
+ if(proc == NULL) {
+ FreeVec(absw);
+ return NSERROR_NOMEM;
+ }
+
+ return NSERROR_OK;
+}
+
+
+static struct gui_llcache_table amiga_llcache_table = {
+ .initialise = initialise,
+ .finalise = finalise,
+ .store = ami_backing_store_store,
+ .fetch = fetch,
+ .invalidate = invalidate,
+};
+
+struct gui_llcache_table *amiga_filesystem_llcache_table = &amiga_llcache_table;
+