1 #include "opener_context_resource.h" 2 #include "opener_context_object_server.h" 3 #include "opener_resource.h" 4 #include "resource_server.h" 5 6 /* Support for providing access to files. */ 7 8 OpenerContextResource::OpenerContextResource(OpenerResource *opener, Memory *memory) 9 : SimplePager(memory), _opener(opener) 10 { 11 } 12 13 int OpenerContextResource::expected_items() 14 { 15 return OpenerContextObject_expected_items; 16 } 17 18 ipc_server_handler_type OpenerContextResource::handler() 19 { 20 return (ipc_server_handler_type) handle_OpenerContextObject; 21 } 22 23 24 25 /* Data access methods. */ 26 27 char *OpenerContextResource::get_path() 28 { 29 return _region->read(); 30 } 31 32 33 34 /* Opener context interface methods. */ 35 36 long OpenerContextResource::open(int flags, size_t *size, l4_cap_idx_t *file) 37 { 38 /* NOTE: Support flags in the file pager method and obtain the file size. */ 39 40 FilePager *pager = _opener->open(get_path()); 41 42 /* Complete the initialisation and start a server in a new thread. */ 43 44 ResourceServer server(pager); 45 long err = server.start_thread(); 46 47 /* Return the file size. */ 48 /* Return the server capability to the caller. */ 49 50 *size = pager->get_data_size(); 51 *file = server.config()->server; 52 return err; 53 } 54 55 // vim: tabstop=4 expandtab shiftwidth=4