1.1 --- a/include/fsclient/fsdesc.h Thu Jun 25 23:29:36 2020 +0200
1.2 +++ b/include/fsclient/fsdesc.h Tue May 05 22:42:13 2020 +0200
1.3 @@ -27,6 +27,17 @@
1.4
1.5 EXTERN_C_BEGIN
1.6
1.7 +/* Simple shared buffer state. */
1.8 +
1.9 +typedef struct
1.10 +{
1.11 + /* Shared buffer communication. */
1.12 +
1.13 + char *addr; /* shared buffer address */
1.14 + size_t size; /* size of the buffer */
1.15 +
1.16 +} fs_buffer_t;
1.17 +
1.18 /* Common filesystem object state. */
1.19
1.20 typedef struct
1.21 @@ -37,10 +48,9 @@
1.22 size_t end_pos; /* end position of the mapped dataspace in the file */
1.23 size_t size; /* file size (used by the client for seek) */
1.24
1.25 - /* Shared buffer communication (context or file object dataspace memory). */
1.26 + /* Shared buffer communication. */
1.27
1.28 - char *buffer; /* shared buffer */
1.29 - size_t buffer_size; /* size of the buffer */
1.30 + fs_buffer_t buffer;
1.31
1.32 } fs_object_t;
1.33
1.34 @@ -55,7 +65,7 @@
1.35 l4_cap_idx_t ref; /* filesystem object reference
1.36 (also acting as dataspace) */
1.37
1.38 - fs_object_t cobj; /* context object state */
1.39 + fs_buffer_t cobj; /* context object state */
1.40 fs_object_t obj; /* common filesystem object state */
1.41
1.42 /* Configuration. */
1.43 @@ -80,16 +90,16 @@
1.44 /* Deallocation operations. */
1.45
1.46 void fsdesc_deallocate(file_descriptor_t *desc);
1.47 -void fsdesc_deallocate_buffer(fs_object_t *obj);
1.48 +void fsdesc_deallocate_buffer(fs_buffer_t *buffer);
1.49 void fsdesc_deallocate_caps(file_descriptor_t *desc);
1.50 void fsdesc_deallocate_context(file_descriptor_t *desc);
1.51
1.52 /* IPC-related initialisation. */
1.53
1.54 -char *fsdesc_get_name(fs_object_t *obj);
1.55 -void fsdesc_set_name(fs_object_t *obj, const char *name);
1.56 -long fsdesc_init_object(fs_object_t *fsobj, l4_cap_idx_t ds);
1.57 -void fsdesc_init_object_buffer(fs_object_t *fsobj, char *buffer, unsigned long size);
1.58 +char *fsdesc_get_name(fs_buffer_t *buffer);
1.59 +void fsdesc_set_name(fs_buffer_t *buffer, const char *name);
1.60 +long fsdesc_init_buffer_from_dataspace(fs_buffer_t *buffer, l4_cap_idx_t ds);
1.61 +void fsdesc_init_buffer(fs_buffer_t *buffer, char *addr, unsigned long size);
1.62
1.63 /* State operations. */
1.64
2.1 --- a/lib/src/client.c Thu Jun 25 23:29:36 2020 +0200
2.2 +++ b/lib/src/client.c Tue May 05 22:42:13 2020 +0200
2.3 @@ -204,12 +204,12 @@
2.4 /* Initially, memory-map the start of the file. If the memory mapping fails,
2.5 the dataspace address for the object will be zero. */
2.6
2.7 - desc->obj.buffer = client_mmap(desc, 0, buffer_size ? buffer_size
2.8 - : DEFAULT_BUFFER_SIZE);
2.9 + desc->obj.buffer.addr = client_mmap(desc, 0, buffer_size ? buffer_size
2.10 + : DEFAULT_BUFFER_SIZE);
2.11
2.12 /* Return with success if a buffer was assigned. */
2.13
2.14 - if (desc->obj.buffer)
2.15 + if (desc->obj.buffer.addr)
2.16 return 1;
2.17
2.18 /* Release all resources. */
2.19 @@ -258,9 +258,9 @@
2.20 {
2.21 /* Where the position is outside the current region, re-map. */
2.22
2.23 - if ((position < desc->obj.start_pos) || (position >= desc->obj.start_pos + desc->obj.buffer_size))
2.24 + if ((position < desc->obj.start_pos) || (position >= desc->obj.start_pos + desc->obj.buffer.size))
2.25 {
2.26 - if (!client_mmap(desc, position, position + desc->obj.buffer_size))
2.27 + if (!client_mmap(desc, position, position + desc->obj.buffer.size))
2.28 return -L4_EIO;
2.29 }
2.30
2.31 @@ -321,13 +321,13 @@
2.32
2.33 /* Attach the filesystem object as a dataspace. */
2.34
2.35 - if (desc->obj.buffer)
2.36 - ipc_detach_dataspace(desc->obj.buffer);
2.37 + if (desc->obj.buffer.addr)
2.38 + ipc_detach_dataspace(desc->obj.buffer.addr);
2.39
2.40 - ipc_attach_dataspace(desc->ref, desc->obj.buffer_size,
2.41 - (void **) &desc->obj.buffer);
2.42 + ipc_attach_dataspace(desc->ref, desc->obj.buffer.size,
2.43 + (void **) &desc->obj.buffer.addr);
2.44
2.45 - return desc->obj.buffer;
2.46 + return desc->obj.buffer.addr;
2.47 }
2.48
2.49
2.50 @@ -433,7 +433,7 @@
2.51
2.52 /* Remap the dataspace. */
2.53
2.54 - if (!client_mmap(desc, position, position + desc->obj.buffer_size))
2.55 + if (!client_mmap(desc, position, position + desc->obj.buffer.size))
2.56 return NULL;
2.57
2.58 /* Check available data again. */
3.1 --- a/lib/src/fsdesc.c Thu Jun 25 23:29:36 2020 +0200
3.2 +++ b/lib/src/fsdesc.c Tue May 05 22:42:13 2020 +0200
3.3 @@ -60,31 +60,31 @@
3.4
3.5 /* Buffer access functions. */
3.6
3.7 -char *fsdesc_get_name(fs_object_t *obj)
3.8 +char *fsdesc_get_name(fs_buffer_t *buffer)
3.9 {
3.10 /* Reject unterminated strings. */
3.11
3.12 - if (strnlen(obj->buffer, obj->buffer_size) < obj->buffer_size)
3.13 - return obj->buffer;
3.14 + if (strnlen(buffer->addr, buffer->size) < buffer->size)
3.15 + return buffer->addr;
3.16 else
3.17 return NULL;
3.18 }
3.19
3.20 -void fsdesc_set_name(fs_object_t *obj, const char *name)
3.21 +void fsdesc_set_name(fs_buffer_t *buffer, const char *name)
3.22 {
3.23 /* Truncate the string to the buffer size (minus terminator). */
3.24 /* NOTE: Would use strncpy here. */
3.25
3.26 unsigned long i;
3.27
3.28 - for (i = 0; i < obj->buffer_size - 1; i++)
3.29 + for (i = 0; i < buffer->size - 1; i++)
3.30 {
3.31 - obj->buffer[i] = name[i];
3.32 + buffer->addr[i] = name[i];
3.33 if (!name[i])
3.34 break;
3.35 }
3.36
3.37 - obj->buffer[obj->buffer_size - 1] = '\0';
3.38 + buffer->addr[buffer->size - 1] = '\0';
3.39 }
3.40
3.41
3.42 @@ -124,7 +124,7 @@
3.43
3.44 if (l4_is_valid_cap(desc->ref))
3.45 {
3.46 - fsdesc_deallocate_buffer(&desc->obj);
3.47 + fsdesc_deallocate_buffer(&desc->obj.buffer);
3.48 ipc_cap_free_um(desc->ref);
3.49 desc->ref = L4_INVALID_CAP;
3.50 }
3.51 @@ -144,12 +144,12 @@
3.52
3.53 /* Deallocate dataspace-related buffers. */
3.54
3.55 -void fsdesc_deallocate_buffer(fs_object_t *obj)
3.56 +void fsdesc_deallocate_buffer(fs_buffer_t *buffer)
3.57 {
3.58 - if (obj->buffer)
3.59 + if (buffer->addr)
3.60 {
3.61 - ipc_detach_dataspace(obj->buffer);
3.62 - obj->buffer = 0;
3.63 + ipc_detach_dataspace(buffer->addr);
3.64 + buffer->addr = 0;
3.65 }
3.66 }
3.67
3.68 @@ -157,7 +157,7 @@
3.69
3.70 /* Initialise a filesystem object structure with the given dataspace. */
3.71
3.72 -long fsdesc_init_object(fs_object_t *fsobj, l4_cap_idx_t ds)
3.73 +long fsdesc_init_buffer_from_dataspace(fs_buffer_t *buffer, l4_cap_idx_t ds)
3.74 {
3.75 unsigned long size;
3.76
3.77 @@ -167,17 +167,17 @@
3.78 if (err)
3.79 return err;
3.80
3.81 - fsobj->buffer_size = size;
3.82 + buffer->size = size;
3.83
3.84 /* Attach the dataspace. */
3.85
3.86 - return ipc_attach_dataspace(ds, fsobj->buffer_size, (void **) &fsobj->buffer);
3.87 + return ipc_attach_dataspace(ds, buffer->size, (void **) &buffer->addr);
3.88 }
3.89
3.90 /* Initialise a filesystem object structure with buffer details. */
3.91
3.92 -void fsdesc_init_object_buffer(fs_object_t *fsobj, char *buffer, unsigned long size)
3.93 +void fsdesc_init_buffer(fs_buffer_t *buffer, char *addr, unsigned long size)
3.94 {
3.95 - fsobj->buffer = buffer;
3.96 - fsobj->buffer_size = size;
3.97 + buffer->addr = addr;
3.98 + buffer->size = size;
3.99 }
4.1 --- a/lib/src/fsdesc_client.c Thu Jun 25 23:29:36 2020 +0200
4.2 +++ b/lib/src/fsdesc_client.c Tue May 05 22:42:13 2020 +0200
4.3 @@ -58,7 +58,7 @@
4.4
4.5 /* Initialise the descriptor with the context as dataspace. */
4.6
4.7 - return fsdesc_init_object(&desc->cobj, desc->context);
4.8 + return fsdesc_init_buffer_from_dataspace(&desc->cobj, desc->context);
4.9 }
4.10
4.11 long
4.12 @@ -194,7 +194,7 @@
4.13 /* Set the dataspace size. */
4.14
4.15 desc->data_start = position - desc->obj.start_pos;
4.16 - desc->obj.buffer_size = desc->obj.end_pos - desc->obj.start_pos;
4.17 + desc->obj.buffer.size = desc->obj.end_pos - desc->obj.start_pos;
4.18
4.19 return L4_EOK;
4.20 }
5.1 --- a/lib/src/fsops.c Thu Jun 25 23:29:36 2020 +0200
5.2 +++ b/lib/src/fsops.c Tue May 05 22:42:13 2020 +0200
5.3 @@ -67,7 +67,7 @@
5.4
5.5 char *fs_get_data_start(file_descriptor_t *desc)
5.6 {
5.7 - return desc->obj.buffer + desc->data_start;
5.8 + return desc->obj.buffer.addr + desc->data_start;
5.9 }
5.10
5.11 /* Return the position in the file of the start of available data. */
5.12 @@ -81,7 +81,7 @@
5.13
5.14 char *fs_get_data_end(file_descriptor_t *desc)
5.15 {
5.16 - return desc->obj.buffer + desc->data_end;
5.17 + return desc->obj.buffer.addr + desc->data_end;
5.18 }
5.19
5.20 /* Return the position in the file of the end of available data. */
5.21 @@ -95,7 +95,7 @@
5.22
5.23 size_t fs_get_space(file_descriptor_t *desc)
5.24 {
5.25 - return desc->obj.buffer_size - desc->data_start;
5.26 + return desc->obj.buffer.size - desc->data_start;
5.27 }
5.28
5.29 /* Return whether the given position is provided by the buffer. */
5.30 @@ -121,8 +121,8 @@
5.31 {
5.32 size_t extent = desc->obj.size - desc->obj.start_pos;
5.33
5.34 - if (extent > desc->obj.buffer_size)
5.35 - extent = desc->obj.buffer_size;
5.36 + if (extent > desc->obj.buffer.size)
5.37 + extent = desc->obj.buffer.size;
5.38
5.39 desc->data_end = extent;
5.40 }