summaryrefslogtreecommitdiff
path: root/devnode/devnode.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2011-05-08 22:45:06 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2011-05-08 22:45:06 +0200
commit878c5456c5a2f9bff741a7b7bcdccd5c1694db22 (patch)
treebcf3d101215fa70b953aa7e9d0de805c5f8865b4 /devnode/devnode.c
parent9062642230b7bfb48e7b30f98cba8528172b2d36 (diff)
parentc8f311a7a32d4b0cb0c21672f63bca8efdf5d83a (diff)
Merge branch 'dde' into HEAD
Diffstat (limited to 'devnode/devnode.c')
-rw-r--r--devnode/devnode.c27
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");