1.1 --- a/file.cc Sun Feb 28 23:28:45 2021 +0100
1.2 +++ b/file.cc Mon Mar 01 00:22:56 2021 +0100
1.3 @@ -31,25 +31,7 @@
1.4
1.5
1.6
1.7 -offset_t file_span(file_t *file)
1.8 -{
1.9 - offset_t size = file->end_pos - file->start_pos;
1.10 -
1.11 - return (file->data_end < size) ? file->data_end : size;
1.12 -}
1.13 -
1.14 -void file_init(file_t *file)
1.15 -{
1.16 - file->memory = NULL;
1.17 - file->ref = L4_INVALID_CAP;
1.18 -}
1.19 -
1.20 -long file_open(file_t *file, l4_cap_idx_t context_ref)
1.21 -{
1.22 - client_OpenerContext context(context_ref);
1.23 - file_init(file);
1.24 - return context.open(L4_FPAGE_RW, &file->size, &file->ref);
1.25 -}
1.26 +/* Release resources for the given file. */
1.27
1.28 void file_close(file_t *file)
1.29 {
1.30 @@ -62,18 +44,9 @@
1.31 file_init(file);
1.32 }
1.33
1.34 -long file_mmap(file_t *file, offset_t position, offset_t length)
1.35 -{
1.36 - client_MappedFile mapped_file(file->ref);
1.37 - long err = mapped_file.mmap(position, length, &file->start_pos, &file->end_pos, &file->data_end);
1.38 +/* Initialise a file structure for a context obtained from the given server. */
1.39
1.40 - if (err)
1.41 - return err;
1.42 -
1.43 - return ipc_attach_dataspace(file->ref, file->end_pos - file->start_pos, (void **) &file->memory);
1.44 -}
1.45 -
1.46 -long context_open(file_t *file, l4_cap_idx_t server)
1.47 +long file_context(file_t *file, l4_cap_idx_t server)
1.48 {
1.49 client_Opener opener(server);
1.50 unsigned long size, flags;
1.51 @@ -95,4 +68,43 @@
1.52 return ipc_attach_dataspace(file->ref, size, (void **) &file->memory);
1.53 }
1.54
1.55 +/* Initialise the given file structure. */
1.56 +
1.57 +void file_init(file_t *file)
1.58 +{
1.59 + file->memory = NULL;
1.60 + file->ref = L4_INVALID_CAP;
1.61 +}
1.62 +
1.63 +/* Map a region of the given file to a memory region. */
1.64 +
1.65 +long file_mmap(file_t *file, offset_t position, offset_t length)
1.66 +{
1.67 + client_MappedFile mapped_file(file->ref);
1.68 + long err = mapped_file.mmap(position, length, &file->start_pos, &file->end_pos, &file->data_end);
1.69 +
1.70 + if (err)
1.71 + return err;
1.72 +
1.73 + return ipc_attach_dataspace(file->ref, file->end_pos - file->start_pos, (void **) &file->memory);
1.74 +}
1.75 +
1.76 +/* Open a file using the given structure and context reference. */
1.77 +
1.78 +long file_open(file_t *file, l4_cap_idx_t context_ref)
1.79 +{
1.80 + client_OpenerContext context(context_ref);
1.81 + file_init(file);
1.82 + return context.open(L4_FPAGE_RW, &file->size, &file->ref);
1.83 +}
1.84 +
1.85 +/* Return the amount of data in the mapped region for the given file. */
1.86 +
1.87 +offset_t file_span(file_t *file)
1.88 +{
1.89 + offset_t size = file->end_pos - file->start_pos;
1.90 +
1.91 + return (file->data_end < size) ? file->data_end : size;
1.92 +}
1.93 +
1.94 // vim: tabstop=2 expandtab shiftwidth=2