1.1 --- a/libfsserver/lib/files/opener_resource.cc Sat Sep 18 18:51:43 2021 +0200
1.2 +++ b/libfsserver/lib/files/opener_resource.cc Mon Sep 20 01:16:59 2021 +0200
1.3 @@ -71,14 +71,25 @@
1.4
1.5
1.6
1.7 -/* Return a directory pager. */
1.8 +/* Return a directory object reference for the given file identifier. */
1.9
1.10 long OpenerResource::get_directory(const char *path, flags_t flags,
1.11 fileid_t fileid, offset_t *size,
1.12 - l4_cap_idx_t *cap, object_flags_t *object_flags)
1.13 + l4_cap_idx_t *cap,
1.14 + object_flags_t *object_flags)
1.15 {
1.16 - (void) path; (void) flags; (void) fileid; (void) size; (void) cap; (void) object_flags;
1.17 - return -L4_EIO;
1.18 + Resource *directory;
1.19 + long err = _paging->get_directory(this, path, flags, fileid, &directory);
1.20 +
1.21 + if (err)
1.22 + return err;
1.23 +
1.24 + /* Provide non-file values for certain outputs. */
1.25 +
1.26 + *size = 0;
1.27 + *object_flags = 0;
1.28 +
1.29 + return ResourceServer(directory).start_thread(cap);
1.30 }
1.31
1.32 /* Return a file pager. */
1.33 @@ -93,20 +104,11 @@
1.34 if (err)
1.35 return err;
1.36
1.37 - *object_flags = OBJECT_SUPPORTS_MMAP | OBJECT_HAS_SIZE;
1.38 -
1.39 - return resource_for_pager(pager, size, cap);
1.40 -}
1.41 -
1.42 -/* Return pager resource details. */
1.43 + /* Obtain the size details from the pager, also providing appropriate
1.44 + flags. */
1.45
1.46 -long OpenerResource::resource_for_pager(Pager *pager, offset_t *size, l4_cap_idx_t *cap)
1.47 -{
1.48 *size = pager->get_data_size();
1.49 -
1.50 - /* Complete the initialisation and start a server in a new thread.
1.51 - If the thread does not start, the resource (including pager) will be
1.52 - finalised. */
1.53 + *object_flags = OBJECT_SUPPORTS_MMAP | OBJECT_HAS_SIZE;
1.54
1.55 return ResourceServer(pager).start_thread(cap);
1.56 }