diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-05-08 22:45:06 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-05-08 22:45:06 +0200 |
commit | 878c5456c5a2f9bff741a7b7bcdccd5c1694db22 (patch) | |
tree | bcf3d101215fa70b953aa7e9d0de805c5f8865b4 /devnode/devnode.c | |
parent | 9062642230b7bfb48e7b30f98cba8528172b2d36 (diff) | |
parent | c8f311a7a32d4b0cb0c21672f63bca8efdf5d83a (diff) |
Merge branch 'dde' into HEAD
Diffstat (limited to 'devnode/devnode.c')
-rw-r--r-- | devnode/devnode.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/devnode/devnode.c b/devnode/devnode.c index 7abf2bf8..299de3c3 100644 --- a/devnode/devnode.c +++ b/devnode/devnode.c @@ -27,6 +27,7 @@ #include <errno.h> #include <error.h> #include <stddef.h> +#include <fcntl.h> #include <hurd.h> #include <mach.h> @@ -42,6 +43,7 @@ static char *device_name; /* The device name used by the socket servers. */ static char *user_device_name; +static char *master_file; /* The master device port for opening the interface. */ static mach_port_t master_device; @@ -67,7 +69,7 @@ int trivfs_fsid = 0; int trivfs_support_read = 0; int trivfs_support_write = 0; int trivfs_support_exec = 0; -int trivfs_allow_open = 0; +int trivfs_allow_open = O_READ | O_WRITE; struct port_class *trivfs_protid_portclasses[1]; struct port_class *trivfs_cntl_portclasses[1]; @@ -237,6 +239,28 @@ ds_device_set_filter (device_t device, mach_port_t receive_port, return D_INVALID_OPERATION; } +error_t +trivfs_append_args (struct trivfs_control *fsys, char **argz, size_t *argz_len) +{ + error_t err = 0; + +#define ADD_OPT(fmt, args...) \ + do { char buf[100]; \ + if (! err) { \ + snprintf (buf, sizeof buf, fmt , ##args); \ + err = argz_add (argz, argz_len, buf); } } while (0) + + if (user_device_name) + ADD_OPT ("--name=%s", user_device_name); + if (master_file) + ADD_OPT ("--master-device=%s", master_file); + + ADD_OPT (device_name); + +#undef ADD_OPT + return err; +} + void trivfs_modify_stat (struct trivfs_protid *cred, io_statbuf_t *stat) { @@ -274,6 +298,7 @@ parse_opt (int opt, char *arg, struct argp_state *state) switch (opt) { case 'M': + master_file = arg; master_device = file_name_lookup (arg, 0, 0); if (master_device == MACH_PORT_NULL) error (1, errno, "file_name_lookup"); |