1.1 --- a/opener_resource.cc Sun Mar 28 23:16:12 2021 +0200
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,96 +0,0 @@
1.4 -#include "opener_server.h"
1.5 -#include "opener_resource.h"
1.6 -#include "resource_server.h"
1.7 -
1.8 -/* Support for providing access to files. */
1.9 -
1.10 -OpenerResource::OpenerResource(Accessing *accessing, Paging *paging, Pages *pages)
1.11 -: _accessing(accessing), _paging(paging), _pages(pages)
1.12 -{
1.13 -}
1.14 -
1.15 -int OpenerResource::expected_items()
1.16 -{
1.17 - return Opener_expected_items;
1.18 -}
1.19 -
1.20 -ipc_server_handler_type OpenerResource::handler()
1.21 -{
1.22 - return (ipc_server_handler_type) handle_Opener;
1.23 -}
1.24 -
1.25 -
1.26 -
1.27 -/* Return a pager object for the given path and flags. */
1.28 -
1.29 -FilePager *OpenerResource::open(const char *path, flags_t flags)
1.30 -{
1.31 - fileid_t fileid = get_fileid(path);
1.32 -
1.33 - if (fileid == FILEID_INVALID)
1.34 - return NULL;
1.35 -
1.36 - Accessor *accessor = get_accessor(fileid);
1.37 - PageMapper *mapper = get_mapper(accessor);
1.38 - return new FilePager(fileid, mapper, flags);
1.39 -}
1.40 -
1.41 -/* Obtain an accessor for the 'fileid' or register a new one in the accessing
1.42 - object. */
1.43 -
1.44 -Accessor *OpenerResource::get_accessor(fileid_t fileid)
1.45 -{
1.46 - Accessor *accessor;
1.47 -
1.48 - if (_accessing->reserve(fileid))
1.49 - accessor = _accessing->get(fileid);
1.50 - else
1.51 - {
1.52 - accessor = make_accessor(fileid);
1.53 - _accessing->set(fileid, accessor);
1.54 - }
1.55 -
1.56 - return accessor;
1.57 -}
1.58 -
1.59 -/* Obtain a page mapper for the 'accessor' or register a new one in the
1.60 - paging object. */
1.61 -
1.62 -PageMapper *OpenerResource::get_mapper(Accessor *accessor)
1.63 -{
1.64 - PageMapper *mapper;
1.65 -
1.66 - if (_paging->reserve(accessor))
1.67 - mapper = _paging->get(accessor);
1.68 - else
1.69 - {
1.70 - mapper = new PageMapper(accessor, _pages);
1.71 - _paging->set(accessor, mapper);
1.72 - }
1.73 -
1.74 - return mapper;
1.75 -}
1.76 -
1.77 -
1.78 -
1.79 -/* Opener interface methods. */
1.80 -
1.81 -long OpenerResource::context(l4_cap_idx_t *context)
1.82 -{
1.83 - OpenerContextResource *resource = new OpenerContextResource(this);
1.84 -
1.85 - /* Complete the initialisation and start a server in a new thread.
1.86 - If the thread does not start, the resource should be finalised. */
1.87 -
1.88 - ResourceServer server(resource);
1.89 - long err = server.start_thread();
1.90 -
1.91 - /* Return the server capability to the caller. */
1.92 -
1.93 - if (!err)
1.94 - *context = server.config()->server;
1.95 -
1.96 - return err;
1.97 -}
1.98 -
1.99 -// vim: tabstop=4 expandtab shiftwidth=4