[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 1/8] hw/xen: Add xs_node_read() helper function
From: |
David Woodhouse |
Subject: |
[PULL 1/8] hw/xen: Add xs_node_read() helper function |
Date: |
Thu, 16 Jan 2025 08:43:25 +0000 |
From: David Woodhouse <dwmw@amazon.co.uk>
This returns the full contents of the node, having created the node path
from the printf-style format string provided in its arguments.
This will save various callers from having to do so for themselves (and
from using xs_node_scanf() with the non-portable %ms format string.
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[remove double newline and constify trace parameters]
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@vates.tech>
---
hw/xen/trace-events | 1 +
hw/xen/xen-bus-helper.c | 22 ++++++++++++++++++++++
include/hw/xen/xen-bus-helper.h | 9 +++++++++
3 files changed, 32 insertions(+)
diff --git a/hw/xen/trace-events b/hw/xen/trace-events
index a07fe41c6d..461dee7b23 100644
--- a/hw/xen/trace-events
+++ b/hw/xen/trace-events
@@ -39,6 +39,7 @@ xs_node_create(const char *node) "%s"
xs_node_destroy(const char *node) "%s"
xs_node_vprintf(char *path, char *value) "%s %s"
xs_node_vscanf(char *path, char *value) "%s %s"
+xs_node_read(const char *path, const char *value) "%s %s"
xs_node_watch(char *path) "%s"
xs_node_unwatch(char *path) "%s"
diff --git a/hw/xen/xen-bus-helper.c b/hw/xen/xen-bus-helper.c
index b2b2cc9c5d..22fd2f6c1a 100644
--- a/hw/xen/xen-bus-helper.c
+++ b/hw/xen/xen-bus-helper.c
@@ -142,6 +142,28 @@ int xs_node_scanf(struct qemu_xs_handle *h,
xs_transaction_t tid,
return rc;
}
+char *xs_node_read(struct qemu_xs_handle *h, xs_transaction_t tid,
+ unsigned int *len, Error **errp,
+ const char *path_fmt, ...)
+{
+ char *path, *value;
+ va_list ap;
+
+ va_start(ap, path_fmt);
+ path = g_strdup_vprintf(path_fmt, ap);
+ va_end(ap);
+
+ value = qemu_xen_xs_read(h, tid, path, len);
+ trace_xs_node_read(path, value);
+ if (!value) {
+ error_setg_errno(errp, errno, "failed to read from '%s'", path);
+ }
+
+ g_free(path);
+
+ return value;
+}
+
struct qemu_xs_watch *xs_node_watch(struct qemu_xs_handle *h, const char *node,
const char *key, xs_watch_fn fn,
void *opaque, Error **errp)
diff --git a/include/hw/xen/xen-bus-helper.h b/include/hw/xen/xen-bus-helper.h
index d8dcc2f010..e9911115b3 100644
--- a/include/hw/xen/xen-bus-helper.h
+++ b/include/hw/xen/xen-bus-helper.h
@@ -38,6 +38,15 @@ int xs_node_scanf(struct qemu_xs_handle *h,
xs_transaction_t tid,
const char *fmt, ...)
G_GNUC_SCANF(6, 7);
+/*
+ * Unlike other functions here, the printf-formatted path_fmt is for
+ * the XenStore path, not the contents of the node.
+ */
+char *xs_node_read(struct qemu_xs_handle *h, xs_transaction_t tid,
+ unsigned int *len, Error **errp,
+ const char *path_fmt, ...)
+ G_GNUC_PRINTF(5, 6);
+
/* Watch node/key unless node is empty, in which case watch key */
struct qemu_xs_watch *xs_node_watch(struct qemu_xs_handle *h, const char *node,
const char *key, xs_watch_fn fn,
--
2.47.0
- [PULL 0/8] Xen regression fixes and cleanups, David Woodhouse, 2025/01/16
- [PULL 5/8] hw/xen: Use xs_node_read() from xen_netdev_get_name(), David Woodhouse, 2025/01/16
- [PULL 7/8] hw/xen: Fix errp handling in xen_console, David Woodhouse, 2025/01/16
- [PULL 3/8] hw/xen: Use xs_node_read() from xs_node_vscanf(), David Woodhouse, 2025/01/16
- [PULL 8/8] system/runstate: Fix regression, clarify BQL status of exit notifiers, David Woodhouse, 2025/01/16
- [PULL 6/8] hw/xen: Use xs_node_read() from xenstore_read_str() instead of open-coding it, David Woodhouse, 2025/01/16
- [PULL 4/8] hw/xen: Use xs_node_read() from xen_console_get_name(), David Woodhouse, 2025/01/16
- [PULL 2/8] xen: do not use '%ms' scanf specifier, David Woodhouse, 2025/01/16
- [PULL 1/8] hw/xen: Add xs_node_read() helper function,
David Woodhouse <=