1.1 --- a/server/src/main.cc Thu Jun 27 18:45:34 2019 +0200
1.2 +++ b/server/src/main.cc Sat Jun 29 00:32:41 2019 +0200
1.3 @@ -93,11 +93,8 @@
1.4
1.5 void _open(int op, ipc_message_t *msg)
1.6 {
1.7 + file_descriptor_t desc;
1.8 int flags;
1.9 - l4_cap_idx_t server, irq;
1.10 - l4re_ds_t ds;
1.11 - size_t size;
1.12 - char *buffer;
1.13 long err;
1.14
1.15 /* Obtain the flags. */
1.16 @@ -106,8 +103,7 @@
1.17
1.18 /* Obtain the dataspace and IRQ object. */
1.19
1.20 - err = ipc_message_import_dataspace(msg, 0, &ds, (l4_addr_t *) &buffer) ||
1.21 - ipc_message_import_capability(msg, 1, &irq);
1.22 + err = fsdesc_import_dataspace(msg, 0, &desc.obj) || fsdesc_import_irq(msg, 1, &desc.obj);
1.23 if (err)
1.24 {
1.25 ipc_message_send_error(msg, -L4_EIO);
1.26 @@ -116,7 +112,7 @@
1.27
1.28 /* Match the path to a mountpoint. */
1.29
1.30 - int selected = find_mountpoint(buffer);
1.31 + int selected = find_mountpoint(desc.obj.buffer);
1.32
1.33 if (selected < 0)
1.34 {
1.35 @@ -126,7 +122,7 @@
1.36
1.37 /* Rewrite the path for the selected filesystem. */
1.38
1.39 - rewrite_path(buffer, _mountpoints[selected]);
1.40 + rewrite_path(desc.obj.buffer, _mountpoints[selected]);
1.41
1.42 /* Find the path within the selected filesystem. */
1.43
1.44 @@ -134,7 +130,9 @@
1.45 NOTE: The L4_MSGTAG_PROPAGATE flag is not supported by Fiasco.OC, so this
1.46 NOTE: object has to act as intermediary. */
1.47
1.48 - err = fs_ipc_open(flags, _servers[selected], op, ds, irq, &server, &size);
1.49 + desc.server = _servers[selected];
1.50 +
1.51 + err = fs_ipc_open(&desc, flags, op);
1.52 if (err)
1.53 {
1.54 ipc_message_send_error(msg, -L4_EIO);
1.55 @@ -143,15 +141,15 @@
1.56
1.57 /* Free the capability and buffer from this task. */
1.58
1.59 - ipc_message_discard_dataspace(msg, ds, (l4_addr_t) buffer);
1.60 + ipc_message_discard_dataspace(msg, desc.obj.ds, (l4_addr_t) desc.obj.buffer);
1.61
1.62 /* Return the file size. */
1.63
1.64 - ipc_message_add_word(msg, size);
1.65 + ipc_message_add_word(msg, desc.obj.size);
1.66
1.67 /* Export and eventually free the server reference from this task. */
1.68
1.69 - ipc_message_propagate_item(msg, server);
1.70 + ipc_message_propagate_item(msg, desc.ref);
1.71 }
1.72
1.73 void mount(ipc_message_t *msg)