From c944947a507e32c71c694e5f6fd8c694a03e9330 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 18 May 2023 19:57:18 +0300 Subject: streamio: Implement trivfs_append_args () This enables me to run 'fsysopts /dev/mach-console' and get: /hurd/streamio --writable console Message-Id: <20230518165719.90745-1-bugaevc@gmail.com> --- trans/streamio.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/trans/streamio.c b/trans/streamio.c index 2d40a5d3..272a002c 100644 --- a/trans/streamio.c +++ b/trans/streamio.c @@ -23,7 +23,9 @@ #include #include #include +#include #include +#include #include #include @@ -722,6 +724,43 @@ trivfs_S_file_syncfs (struct trivfs_protid *cred, return err; } +error_t +trivfs_append_args (struct trivfs_control *fsys, + char **argz, size_t *argz_len) +{ + error_t err; + + switch (trivfs_allow_open & O_RDWR) + { + default: + assert_backtrace (!"Bad trivfs_allow_open"); + case O_READ: + err = argz_add (argz, argz_len, "--readonly"); + break; + case O_WRITE: + err = argz_add (argz, argz_len, "--writeonly"); + break; + case O_RDWR: + err = argz_add (argz, argz_len, "--writable"); + break; + } + + if (err) + return err; + + if (rdev != (dev_t) 0) + { + char buf[40]; + snprintf (buf, sizeof (buf), "--rdev=%d,%d", + gnu_dev_major (rdev), gnu_dev_minor (rdev)); + err = argz_add (argz, argz_len, buf); + if (err) + return err; + } + + return argz_add (argz, argz_len, stream_name); +} + /* This flag is set if there is an outstanding device_write. */ static int output_pending; -- cgit v1.2.3