1.1 --- a/libfsclient/lib/src/client.cc Sun Jul 18 00:47:14 2021 +0200
1.2 +++ b/libfsclient/lib/src/client.cc Sat Jul 24 18:55:21 2021 +0200
1.3 @@ -20,7 +20,6 @@
1.4 */
1.5
1.6 #include <l4/re/env.h>
1.7 -#include <ipc/irq.h>
1.8
1.9 #include <stdio.h>
1.10 #include <stdlib.h>
1.11 @@ -143,6 +142,33 @@
1.12
1.13
1.14
1.15 +/* Open a file opening object. */
1.16 +
1.17 +l4_cap_idx_t client_open_for_user(sys_uid_t uid, sys_gid_t gid, sys_mode_t umask)
1.18 +{
1.19 + l4_cap_idx_t server = l4re_env_get_cap("server");
1.20 +
1.21 + return client_open_for_user_using(uid, gid, umask, server);
1.22 +}
1.23 +
1.24 +/* Open a file opening object via a named capability. */
1.25 +
1.26 +l4_cap_idx_t client_open_for_user_using(sys_uid_t uid, sys_gid_t gid, sys_mode_t umask, l4_cap_idx_t server)
1.27 +{
1.28 + if (l4_is_invalid_cap(server))
1.29 + return L4_INVALID_CAP;
1.30 +
1.31 + l4_cap_idx_t opener;
1.32 + long err = file_open_for_user(uid, gid, umask, server, &opener);
1.33 +
1.34 + if (err)
1.35 + return L4_INVALID_CAP;
1.36 +
1.37 + return opener;
1.38 +}
1.39 +
1.40 +
1.41 +
1.42 /* Close a filesystem object. */
1.43
1.44 void client_close(file_t *file)
1.45 @@ -160,20 +186,23 @@
1.46
1.47 file_t *client_open(const char *name, flags_t flags)
1.48 {
1.49 - return client_open_using(name, flags, "server");
1.50 + l4_cap_idx_t server = l4re_env_get_cap("server");
1.51 +
1.52 + return client_open_using(name, flags, server);
1.53 }
1.54
1.55 /* Open a filesystem object via a named capability. */
1.56
1.57 -file_t *client_open_using(const char *name, flags_t flags, const char *cap)
1.58 +file_t *client_open_using(const char *name, flags_t flags, l4_cap_idx_t server)
1.59 {
1.60 + if (l4_is_invalid_cap(server))
1.61 + return NULL;
1.62 +
1.63 file_t *file = (file_t *) malloc(sizeof(file_t));
1.64
1.65 if (file == NULL)
1.66 return NULL;
1.67
1.68 - l4_cap_idx_t server = l4re_env_get_cap(cap);
1.69 -
1.70 if (file_open(file, name, flags, server))
1.71 {
1.72 free(file);
1.73 @@ -189,11 +218,16 @@
1.74
1.75 long client_pipe(file_t **reader, file_t **writer)
1.76 {
1.77 - return client_pipe_using(reader, writer, "pipes");
1.78 + l4_cap_idx_t server = l4re_env_get_cap("pipes");
1.79 +
1.80 + return client_pipe_using(reader, writer, server);
1.81 }
1.82
1.83 -long client_pipe_using(file_t **reader, file_t **writer, const char *cap)
1.84 +long client_pipe_using(file_t **reader, file_t **writer, l4_cap_idx_t server)
1.85 {
1.86 + if (l4_is_invalid_cap(server))
1.87 + return -L4_EINVAL;
1.88 +
1.89 *reader = (file_t *) malloc(sizeof(file_t));
1.90
1.91 if (*reader == NULL)
1.92 @@ -207,8 +241,6 @@
1.93 return -L4_ENOMEM;
1.94 }
1.95
1.96 - l4_cap_idx_t server = l4re_env_get_cap(cap);
1.97 -
1.98 long err = pipe_open(DEFAULT_PIPE_SIZE, *reader, *writer, server);
1.99
1.100 if (err)