1.1 --- a/libfsserver/lib/files/file_provider.cc Sun Oct 17 18:48:30 2021 +0200
1.2 +++ b/libfsserver/lib/files/file_provider.cc Sun Oct 17 21:55:37 2021 +0200
1.3 @@ -19,14 +19,16 @@
1.4 * Boston, MA 02110-1301, USA
1.5 */
1.6
1.7 +#include "file_pager.h"
1.8 #include "file_provider.h"
1.9
1.10
1.11
1.12 /* Initialise the provider with a page 'mapper' for the file's contents. */
1.13
1.14 -FileProvider::FileProvider(PageMapper *mapper)
1.15 -: Provider(), _mapper(mapper)
1.16 +FileProvider::FileProvider(fileid_t fileid, map_flags_t flags,
1.17 + FileRegistry *registry, PageMapper *mapper)
1.18 +: Provider(fileid, registry), _flags(flags), _mapper(mapper)
1.19 {
1.20 }
1.21
1.22 @@ -50,4 +52,25 @@
1.23 return _mapper;
1.24 }
1.25
1.26 +/* Return a file pager initialised with a provider, page mapper and accessor. */
1.27 +
1.28 +long FileProvider::make_resource(offset_t *size, object_flags_t *object_flags,
1.29 + Resource **resource)
1.30 +{
1.31 + /* Initialise the pager with the provider and a reference to this object for
1.32 + detaching from the provider. */
1.33 +
1.34 + FilePager *pager = new FilePager(_fileid, this, _flags, _registry);
1.35 +
1.36 + /* Obtain the size details from the pager, also providing appropriate
1.37 + flags. */
1.38 +
1.39 + *size = pager->get_data_size();
1.40 + *object_flags = OBJECT_SUPPORTS_MMAP | OBJECT_HAS_SIZE;
1.41 +
1.42 + this->attach();
1.43 + *resource = pager;
1.44 + return L4_EOK;
1.45 +}
1.46 +
1.47 // vim: tabstop=4 expandtab shiftwidth=4