From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>
Subject: [Qemu-devel] [PULL 14/23] util: Emancipate id_wellformed() from QemuOpts
Date: Sat, 4 Oct 2014 21:24:40 +0100 [thread overview]
Message-ID: <1412454289-1789-15-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1412454289-1789-1-git-send-email-stefanha@redhat.com>
From: Markus Armbruster <armbru@redhat.com>
IDs have long spread beyond QemuOpts: not everything with an ID
necessarily goes through QemuOpts. Commit 9aebf3b is about such a
case: block layer names are meant to be well-formed IDs, but some of
them don't go through QemuOpts, and thus weren't checked. The commit
fixed that the straightforward way: rename the internal QemuOpts
helper id_wellformed() to qemu_opts_id_wellformed() and give it
external linkage.
Instead of using it directly in block.c, the commit adds wrapper
bdrv_is_valid_name(), probably to hide the connection to QemuOpts.
Go one logical step further: emancipate IDs from QemuOpts. Rename the
function back to id_wellformed(), and put it in another file. While
there, clean up its value to bool. Peel off the bdrv_is_valid_name()
wrapper.
[Replaced stray return 0 with return false to match bool returns used
elsewhere in id_wellformed().
--Stefan]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
block.c | 9 ++-------
include/qemu-common.h | 3 +++
include/qemu/option.h | 1 -
util/Makefile.objs | 1 +
util/id.c | 28 ++++++++++++++++++++++++++++
util/qemu-option.c | 17 +----------------
6 files changed, 35 insertions(+), 24 deletions(-)
create mode 100644 util/id.c
diff --git a/block.c b/block.c
index c5a251c..d3aebeb 100644
--- a/block.c
+++ b/block.c
@@ -335,18 +335,13 @@ void bdrv_register(BlockDriver *bdrv)
QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
}
-static bool bdrv_is_valid_name(const char *name)
-{
- return qemu_opts_id_wellformed(name);
-}
-
/* create a new block device (by default it is empty) */
BlockDriverState *bdrv_new(const char *device_name, Error **errp)
{
BlockDriverState *bs;
int i;
- if (*device_name && !bdrv_is_valid_name(device_name)) {
+ if (*device_name && !id_wellformed(device_name)) {
error_setg(errp, "Invalid device name");
return NULL;
}
@@ -874,7 +869,7 @@ static void bdrv_assign_node_name(BlockDriverState *bs,
}
/* Check for empty string or invalid characters */
- if (!bdrv_is_valid_name(node_name)) {
+ if (!id_wellformed(node_name)) {
error_setg(errp, "Invalid node name");
return;
}
diff --git a/include/qemu-common.h b/include/qemu-common.h
index dcb57ab..b87e9c2 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -190,6 +190,9 @@ int64_t strtosz_suffix_unit(const char *nptr, char **end,
/* used to print char* safely */
#define STR_OR_NULL(str) ((str) ? (str) : "null")
+/* id.c */
+bool id_wellformed(const char *id);
+
/* path.c */
void init_paths(const char *prefix);
const char *path(const char *pathname);
diff --git a/include/qemu/option.h b/include/qemu/option.h
index 945347c..59bea75 100644
--- a/include/qemu/option.h
+++ b/include/qemu/option.h
@@ -103,7 +103,6 @@ typedef int (*qemu_opt_loopfunc)(const char *name, const char *value, void *opaq
int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque,
int abort_on_failure);
-int qemu_opts_id_wellformed(const char *id);
QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id);
QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
int fail_if_exists, Error **errp);
diff --git a/util/Makefile.objs b/util/Makefile.objs
index cb8862b..93007e2 100644
--- a/util/Makefile.objs
+++ b/util/Makefile.objs
@@ -8,6 +8,7 @@ util-obj-y += fifo8.o
util-obj-y += acl.o
util-obj-y += error.o qemu-error.o
util-obj-$(CONFIG_POSIX) += compatfd.o
+util-obj-y += id.o
util-obj-y += iov.o aes.o qemu-config.o qemu-sockets.o uri.o notify.o
util-obj-y += qemu-option.o qemu-progress.o
util-obj-y += hexdump.o
diff --git a/util/id.c b/util/id.c
new file mode 100644
index 0000000..09b22fb
--- /dev/null
+++ b/util/id.c
@@ -0,0 +1,28 @@
+/*
+ * Dealing with identifiers
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * Authors:
+ * Markus Armbruster <armbru@redhat.com>,
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1
+ * or later. See the COPYING.LIB file in the top-level directory.
+ */
+
+#include "qemu-common.h"
+
+bool id_wellformed(const char *id)
+{
+ int i;
+
+ if (!qemu_isalpha(id[0])) {
+ return false;
+ }
+ for (i = 1; id[i]; i++) {
+ if (!qemu_isalnum(id[i]) && !strchr("-._", id[i])) {
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/util/qemu-option.c b/util/qemu-option.c
index 0cf9960..5d10695 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -641,28 +641,13 @@ QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id)
return NULL;
}
-int qemu_opts_id_wellformed(const char *id)
-{
- int i;
-
- if (!qemu_isalpha(id[0])) {
- return 0;
- }
- for (i = 1; id[i]; i++) {
- if (!qemu_isalnum(id[i]) && !strchr("-._", id[i])) {
- return 0;
- }
- }
- return 1;
-}
-
QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
int fail_if_exists, Error **errp)
{
QemuOpts *opts = NULL;
if (id) {
- if (!qemu_opts_id_wellformed(id)) {
+ if (!id_wellformed(id)) {
error_set(errp,QERR_INVALID_PARAMETER_VALUE, "id", "an identifier");
#if 0 /* conversion from qerror_report() to error_set() broke this: */
error_printf_unless_qmp("Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.\n");
--
1.9.3
next prev parent reply other threads:[~2014-10-04 20:25 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-04 20:24 [Qemu-devel] [PULL 00/23] Block patches Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 01/23] snapshot: fix referencing wrong variable in while loop in do_delvm Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 02/23] ssh: Don't crash if either host or path is not specified Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 03/23] block: Drop superfluous conditionals around qemu_opts_del() Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 04/23] vmdk: Fix integer overflow in offset calculation Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 05/23] Modify qemu_opt_rename to realize renaming all items in opts Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 06/23] make check-block: Use default cache modes Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 07/23] qemu-iotests: Fix supported cache modes for 052 Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 08/23] blockdev: Orphaned drive search Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 09/23] blockdev: Allow overriding if_max_dev property Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 10/23] pc/vl: Add units-per-default-bus property Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 11/23] ide: Update ide_drive_get to be HBA agnostic Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 12/23] qtest/bios-tables: Correct Q35 command line Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 13/23] q35/ahci: Pick up -cdrom and -hda options Stefan Hajnoczi
2014-10-17 16:53 ` Peter Maydell
2014-10-17 16:57 ` Michael Tokarev
2014-10-17 17:02 ` Peter Maydell
2014-10-17 17:57 ` Peter Maydell
2014-10-04 20:24 ` Stefan Hajnoczi [this message]
2014-10-04 20:24 ` [Qemu-devel] [PULL 15/23] iotests: Use _img_info Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 16/23] qapi: Add corrupt field to ImageInfoSpecificQCow2 Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 17/23] iotests: qemu-img info output for corrupt image Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 18/23] drive_del-test: Merge of qdev-monitor-test, blockdev-test Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 19/23] blockdev-test: Use single rather than double quotes in QMP Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 20/23] blockdev-test: Clean up bogus drive_add argument Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 21/23] blockdev-test: Simplify by using g_assert_cmpstr() Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 22/23] blockdev-test: Factor out some common code into helpers Stefan Hajnoczi
2014-10-04 20:24 ` [Qemu-devel] [PULL 23/23] blockdev-test: Test device_del after drive_del Stefan Hajnoczi
2014-10-06 11:41 ` [Qemu-devel] [PULL 00/23] Block patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1412454289-1789-15-git-send-email-stefanha@redhat.com \
--to=stefanha@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).