# HG changeset patch # User Paul Boddie # Date 1615678821 -3600 # Node ID 649d3c384a0260ea68948412c51d1a079a0d70c9 # Parent a03e69c0ff65264ef6f36e00c206846aaa9290aa Propagate flags via open methods to object initialisers. diff -r a03e69c0ff65 -r 649d3c384a02 file_pager.cc --- a/file_pager.cc Sat Mar 13 23:22:31 2021 +0100 +++ b/file_pager.cc Sun Mar 14 00:40:21 2021 +0100 @@ -4,8 +4,8 @@ /* Initialise a pager for a file with a unique file identifier and shared page mapper for moderating access to loaded pages. */ -FilePager::FilePager(fileid_t fileid, PageMapper *mapper) -: Pager(mapper), fileid(fileid) +FilePager::FilePager(fileid_t fileid, PageMapper *mapper, int flags) +: Pager(mapper, flags), fileid(fileid) { } diff -r a03e69c0ff65 -r 649d3c384a02 file_pager.h --- a/file_pager.h Sat Mar 13 23:22:31 2021 +0100 +++ b/file_pager.h Sun Mar 14 00:40:21 2021 +0100 @@ -10,7 +10,7 @@ public: fileid_t fileid; - explicit FilePager(fileid_t fileid, PageMapper *mapper); + explicit FilePager(fileid_t fileid, PageMapper *mapper, int flags); /* Server details. */ diff -r a03e69c0ff65 -r 649d3c384a02 opener_context_resource.cc --- a/opener_context_resource.cc Sat Mar 13 23:22:31 2021 +0100 +++ b/opener_context_resource.cc Sun Mar 14 00:40:21 2021 +0100 @@ -47,14 +47,12 @@ long OpenerContextResource::open(int flags, size_t *size, l4_cap_idx_t *file) { - /* NOTE: Support flags in the file pager method and obtain the file size. */ - char *path = get_path(); if (path == NULL) return -L4_EINVAL; - FilePager *pager = _opener->open(path); + FilePager *pager = _opener->open(path, flags); /* Complete the initialisation and start a server in a new thread. */ diff -r a03e69c0ff65 -r 649d3c384a02 opener_resource.cc --- a/opener_resource.cc Sat Mar 13 23:22:31 2021 +0100 +++ b/opener_resource.cc Sun Mar 14 00:40:21 2021 +0100 @@ -21,9 +21,9 @@ -/* Return a pager object for the given path. */ +/* Return a pager object for the given path and flags. */ -FilePager *OpenerResource::open(const char *path) +FilePager *OpenerResource::open(const char *path, int flags) { fileid_t fileid = get_fileid(path); @@ -32,7 +32,7 @@ Accessor *accessor = get_accessor(fileid); PageMapper *mapper = get_mapper(accessor); - return new FilePager(fileid, mapper); + return new FilePager(fileid, mapper, flags); } /* Obtain an accessor for the 'fileid' or register a new one in the accessing diff -r a03e69c0ff65 -r 649d3c384a02 opener_resource.h --- a/opener_resource.h Sat Mar 13 23:22:31 2021 +0100 +++ b/opener_resource.h Sun Mar 14 00:40:21 2021 +0100 @@ -46,7 +46,7 @@ /* Direct access methods. */ - FilePager *open(const char *path); + FilePager *open(const char *path, int flags); /* Opener interface methods. */ diff -r a03e69c0ff65 -r 649d3c384a02 pager.cc --- a/pager.cc Sat Mar 13 23:22:31 2021 +0100 +++ b/pager.cc Sun Mar 14 00:40:21 2021 +0100 @@ -4,8 +4,8 @@ -Pager::Pager(PageMapper *mapper) -: _start(0), _size(0), _mapper(mapper) +Pager::Pager(PageMapper *mapper, int flags) +: _start(0), _size(0), _mapper(mapper), _flags(flags) { _mapper->attach(); } diff -r a03e69c0ff65 -r 649d3c384a02 pager.h --- a/pager.h Sat Mar 13 23:22:31 2021 +0100 +++ b/pager.h Sun Mar 14 00:40:21 2021 +0100 @@ -14,9 +14,10 @@ protected: offset_t _start, _size; PageMapper *_mapper; + int _flags; public: - explicit Pager(PageMapper *mapper); + explicit Pager(PageMapper *mapper, int flags); virtual void close();