* [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages
@ 2018-07-31 2:56 Marek Marczykowski-Górecki
2018-07-31 2:56 ` [PATCH v2 2/2] xenstore-client: Add option for raw in-/output Marek Marczykowski-Górecki
2018-07-31 9:02 ` [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Wei Liu
0 siblings, 2 replies; 4+ messages in thread
From: Marek Marczykowski-Górecki @ 2018-07-31 2:56 UTC (permalink / raw)
To: xen-devel
Cc: Wei Liu, Ian Jackson, Marek Marczykowski-Górecki, xen-devel
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
---
Changes in v2:
- new patch
---
docs/man/xenstore-read.pod.1 | 28 ++++++++++++++++++++++++++++
docs/man/xenstore-write.pod.1 | 25 +++++++++++++++++++++++++
2 files changed, 53 insertions(+)
create mode 100644 docs/man/xenstore-read.pod.1
create mode 100644 docs/man/xenstore-write.pod.1
diff --git a/docs/man/xenstore-read.pod.1 b/docs/man/xenstore-read.pod.1
new file mode 100644
index 0000000000..256d58fb7d
--- /dev/null
+++ b/docs/man/xenstore-read.pod.1
@@ -0,0 +1,28 @@
+=head1 NAME
+
+xenstore-read - read Xenstore values
+
+=head1 SYNOPSIS
+
+B<xenstore-read> [I<OPTION>]... [I<PATH>]...
+
+=head1 DESCRIPTION
+
+Read values of one or more Xenstore I<PATH>s.
+
+=over
+
+=item B<-p>
+
+Prefix value with key name.
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
diff --git a/docs/man/xenstore-write.pod.1 b/docs/man/xenstore-write.pod.1
new file mode 100644
index 0000000000..424ab0e30e
--- /dev/null
+++ b/docs/man/xenstore-write.pod.1
@@ -0,0 +1,25 @@
+=head1 NAME
+
+xenstore-write - write Xenstore values
+
+=head1 SYNOPSIS
+
+B<xenstore-read> [I<OPTION>]... I<PATH> I<VALUE>...
+
+=head1 DESCRIPTION
+
+Write I<VALUE>s to Xenstore I<PATH>s. Multiple pairs I<PATH> I<VALUE> can be
+provided to write them at once - in one Xenstore transaction.
+
+=over
+
+=item B<-s>
+
+Connect to the Xenstore daemon using a local socket only.
+
+=back
+
+=head1 BUGS
+
+Send bugs to xen-devel@lists.xen.org, see
+http://wiki.xen.org/xenwiki/ReportingBugs on how to send bug reports.
--
2.17.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] xenstore-client: Add option for raw in-/output
2018-07-31 2:56 [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Marek Marczykowski-Górecki
@ 2018-07-31 2:56 ` Marek Marczykowski-Górecki
2018-07-31 9:03 ` Wei Liu
2018-07-31 9:02 ` [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Wei Liu
1 sibling, 1 reply; 4+ messages in thread
From: Marek Marczykowski-Górecki @ 2018-07-31 2:56 UTC (permalink / raw)
To: xen-devel
Cc: Simon Gaiser, Wei Liu, Ian Jackson,
Marek Marczykowski-Górecki, xen-devel
From: Simon Gaiser <simon@invisiblethingslab.com>
Parsing/generating the escape sequences used by xenstore-client is non
trivial. So make scripting (for use in stubdom) easier by adding a raw
option.
[added man page entries, facor out expand_buffer]
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
---
Changes in v2:
- man page entries
- factor out expand_buffer
---
docs/man/xenstore-read.pod.1 | 4 ++
docs/man/xenstore-write.pod.1 | 4 ++
tools/xenstore/xenstore_client.c | 65 ++++++++++++++++++++++++--------
3 files changed, 57 insertions(+), 16 deletions(-)
diff --git a/docs/man/xenstore-read.pod.1 b/docs/man/xenstore-read.pod.1
index 256d58fb7d..5496de17a8 100644
--- a/docs/man/xenstore-read.pod.1
+++ b/docs/man/xenstore-read.pod.1
@@ -20,6 +20,10 @@ Prefix value with key name.
Connect to the Xenstore daemon using a local socket only.
+=item B<-R>
+
+Read raw value, skip escaping non-printable characters (\x..).
+
=back
=head1 BUGS
diff --git a/docs/man/xenstore-write.pod.1 b/docs/man/xenstore-write.pod.1
index 424ab0e30e..78cbbe1a69 100644
--- a/docs/man/xenstore-write.pod.1
+++ b/docs/man/xenstore-write.pod.1
@@ -17,6 +17,10 @@ provided to write them at once - in one Xenstore transaction.
Connect to the Xenstore daemon using a local socket only.
+=item B<-R>
+
+Write raw value, skip parsing escaped characters (\x..).
+
=back
=head1 BUGS
diff --git a/tools/xenstore/xenstore_client.c b/tools/xenstore/xenstore_client.c
index 3d14d37e62..3afc630ab8 100644
--- a/tools/xenstore/xenstore_client.c
+++ b/tools/xenstore/xenstore_client.c
@@ -44,6 +44,17 @@ static struct expanding_buffer ebuf;
static int output_size = 0;
+/* make sure there is at least 'len' more space in output_buf */
+static void expand_buffer(size_t len)
+{
+ if (output_pos + len > output_size) {
+ output_size += len + 1024;
+ output_buf = realloc(output_buf, output_size);
+ if (output_buf == NULL)
+ err(1, "malloc");
+ }
+}
+
static void
output(const char *fmt, ...) {
va_list ap;
@@ -55,12 +66,7 @@ output(const char *fmt, ...) {
if (len < 0)
err(1, "output");
va_end(ap);
- if (len + 1 + output_pos > output_size) {
- output_size += len + 1024;
- output_buf = realloc(output_buf, output_size);
- if (output_buf == NULL)
- err(1, "malloc");
- }
+ expand_buffer(len + 1);
va_start(ap, fmt);
if (vsnprintf(&output_buf[output_pos], len + 1, fmt, ap) != len)
err(1, "output");
@@ -68,6 +74,14 @@ output(const char *fmt, ...) {
output_pos += len;
}
+static void
+output_raw(const char *data, int len)
+{
+ expand_buffer(len);
+ memcpy(&output_buf[output_pos], data, len);
+ output_pos += len;
+}
+
static void
usage(enum mode mode, int incl_mode, const char *progname)
{
@@ -78,10 +92,10 @@ usage(enum mode mode, int incl_mode, const char *progname)
errx(1, "Usage: %s <mode> [-h] [...]", progname);
case MODE_read:
mstr = incl_mode ? "read " : "";
- errx(1, "Usage: %s %s[-h] [-p] [-s] key [...]", progname, mstr);
+ errx(1, "Usage: %s %s[-h] [-p] [-s] [-R] key [...]", progname, mstr);
case MODE_write:
mstr = incl_mode ? "write " : "";
- errx(1, "Usage: %s %s[-h] [-s] key value [...]", progname, mstr);
+ errx(1, "Usage: %s %s[-h] [-s] [-R] key value [...]", progname, mstr);
case MODE_rm:
mstr = incl_mode ? "rm " : "";
errx(1, "Usage: %s %s[-h] [-s] [-t] key [...]", progname, mstr);
@@ -293,7 +307,8 @@ do_watch(struct xs_handle *xsh, int max_events)
static int
perform(enum mode mode, int optind, int argc, char **argv, struct xs_handle *xsh,
- xs_transaction_t xth, int prefix, int tidy, int upto, int recurse, int nr_watches)
+ xs_transaction_t xth, int prefix, int tidy, int upto, int recurse, int nr_watches,
+ int raw)
{
switch (mode) {
case MODE_ls:
@@ -322,17 +337,27 @@ perform(enum mode mode, int optind, int argc, char **argv, struct xs_handle *xsh
}
if (prefix)
output("%s: ", argv[optind]);
- output("%s\n", sanitise_value(&ebuf, val, len));
+ if (raw)
+ output_raw(val, len);
+ else
+ output("%s\n", sanitise_value(&ebuf, val, len));
free(val);
optind++;
break;
}
case MODE_write: {
char *val_spec = argv[optind + 1];
+ char *val;
unsigned len;
- expanding_buffer_ensure(&ebuf, strlen(val_spec)+1);
- unsanitise_value(ebuf.buf, &len, val_spec);
- if (!xs_write(xsh, xth, argv[optind], ebuf.buf, len)) {
+ if (raw) {
+ val = val_spec;
+ len = strlen(val_spec);
+ } else {
+ expanding_buffer_ensure(&ebuf, strlen(val_spec)+1);
+ unsanitise_value(ebuf.buf, &len, val_spec);
+ val = ebuf.buf;
+ }
+ if (!xs_write(xsh, xth, argv[optind], val, len)) {
warnx("could not write path %s", argv[optind]);
return 1;
}
@@ -506,6 +531,7 @@ main(int argc, char **argv)
int recurse = 0;
int nr_watches = -1;
int transaction;
+ int raw = 0;
struct winsize ws;
enum mode mode;
@@ -539,10 +565,11 @@ main(int argc, char **argv)
{"upto", 0, 0, 'u'}, /* MODE_chmod */
{"recurse", 0, 0, 'r'}, /* MODE_chmod */
{"number", 1, 0, 'n'}, /* MODE_watch */
+ {"raw", 0, 0, 'R'}, /* MODE_read || MODE_write */
{0, 0, 0, 0}
};
- c = getopt_long(argc - switch_argv, argv + switch_argv, "hfspturn:",
+ c = getopt_long(argc - switch_argv, argv + switch_argv, "hfspturn:R",
long_options, &index);
if (c == -1)
break;
@@ -593,6 +620,12 @@ main(int argc, char **argv)
else
usage(mode, switch_argv, argv[0]);
break;
+ case 'R':
+ if ( mode == MODE_read || mode == MODE_write )
+ raw = 1;
+ else
+ usage(mode, switch_argv, argv[0]);
+ break;
}
}
@@ -646,7 +679,7 @@ again:
errx(1, "couldn't start transaction");
}
- ret = perform(mode, optind, argc - switch_argv, argv + switch_argv, xsh, xth, prefix, tidy, upto, recurse, nr_watches);
+ ret = perform(mode, optind, argc - switch_argv, argv + switch_argv, xsh, xth, prefix, tidy, upto, recurse, nr_watches, raw);
if (transaction && !xs_transaction_end(xsh, xth, ret)) {
if (ret == 0 && errno == EAGAIN) {
@@ -657,7 +690,7 @@ again:
}
if (output_pos)
- printf("%s", output_buf);
+ fwrite(output_buf, 1, output_pos, stdout);
free(output_buf);
free(ebuf.buf);
--
2.17.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages
2018-07-31 2:56 [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Marek Marczykowski-Górecki
2018-07-31 2:56 ` [PATCH v2 2/2] xenstore-client: Add option for raw in-/output Marek Marczykowski-Górecki
@ 2018-07-31 9:02 ` Wei Liu
1 sibling, 0 replies; 4+ messages in thread
From: Wei Liu @ 2018-07-31 9:02 UTC (permalink / raw)
To: Marek Marczykowski-Górecki
Cc: Wei Liu, Ian Jackson, xen-devel, xen-devel
On Tue, Jul 31, 2018 at 04:56:53AM +0200, Marek Marczykowski-Górecki wrote:
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Thanks for doing this!
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] xenstore-client: Add option for raw in-/output
2018-07-31 2:56 ` [PATCH v2 2/2] xenstore-client: Add option for raw in-/output Marek Marczykowski-Górecki
@ 2018-07-31 9:03 ` Wei Liu
0 siblings, 0 replies; 4+ messages in thread
From: Wei Liu @ 2018-07-31 9:03 UTC (permalink / raw)
To: Marek Marczykowski-Górecki
Cc: Simon Gaiser, Wei Liu, Ian Jackson, xen-devel, xen-devel
On Tue, Jul 31, 2018 at 04:56:54AM +0200, Marek Marczykowski-Górecki wrote:
> From: Simon Gaiser <simon@invisiblethingslab.com>
>
> Parsing/generating the escape sequences used by xenstore-client is non
> trivial. So make scripting (for use in stubdom) easier by adding a raw
> option.
>
> [added man page entries, facor out expand_buffer]
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-07-31 9:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-31 2:56 [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Marek Marczykowski-Górecki
2018-07-31 2:56 ` [PATCH v2 2/2] xenstore-client: Add option for raw in-/output Marek Marczykowski-Górecki
2018-07-31 9:03 ` Wei Liu
2018-07-31 9:02 ` [PATCH v2 1/2] docs: add xenstore-read and xenstore-write man pages Wei Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).