[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC 30/48] qdev: Relax parsing of bus option
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH RFC 30/48] qdev: Relax parsing of bus option |
Date: |
Wed, 24 Feb 2010 18:55:42 +0100 |
Treat multiple successive slashes as a one slash. Ignore trailing
slashes. This is how POSIX pathnames work.
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/qdev.c | 26 +++++++++++++++++---------
1 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index b170081..6495894 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -555,8 +555,8 @@ static BusState *qbus_find(const char *path)
pos = 0;
} else {
if (sscanf(path, "%127[^/]%n", elem, &len) != 1) {
- qemu_error("path parse error (\"%s\")", path);
- return NULL;
+ assert(!path[0]);
+ elem[0] = len = 0;
}
bus = qbus_find_recursive(main_system_bus, elem, NULL);
if (!bus) {
@@ -567,15 +567,18 @@ static BusState *qbus_find(const char *path)
}
for (;;) {
+ assert(path[pos] == '/' || !path[pos]);
+ while (path[pos] == '/') {
+ pos++;
+ }
if (path[pos] == '\0') {
- /* we are done */
return bus;
}
/* find device */
- if (sscanf(path+pos, "/%127[^/]%n", elem, &len) != 1) {
- qemu_error("path parse error (\"%s\" pos %d)", path, pos);
- return NULL;
+ if (sscanf(path+pos, "%127[^/]%n", elem, &len) != 1) {
+ assert(0);
+ elem[0] = len = 0;
}
pos += len;
dev = qbus_find_dev(bus, elem);
@@ -584,6 +587,11 @@ static BusState *qbus_find(const char *path)
qbus_list_dev(bus);
return NULL;
}
+
+ assert(path[pos] == '/' || !path[pos]);
+ while (path[pos] == '/') {
+ pos++;
+ }
if (path[pos] == '\0') {
/* last specified element is a device. If it has exactly
* one child bus accept it nevertheless */
@@ -601,9 +609,9 @@ static BusState *qbus_find(const char *path)
}
/* find bus */
- if (sscanf(path+pos, "/%127[^/]%n", elem, &len) != 1) {
- qemu_error("path parse error (\"%s\" pos %d)", path, pos);
- return NULL;
+ if (sscanf(path+pos, "%127[^/]%n", elem, &len) != 1) {
+ assert(0);
+ elem[0] = len = 0;
}
pos += len;
bus = qbus_find_bus(dev, elem);
--
1.6.6
- [Qemu-devel] [PATCH RFC 21/48] error: Track locations on command line, (continued)
- [Qemu-devel] [PATCH RFC 21/48] error: Track locations on command line, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 28/48] error: New QERR_PROPERTY_VALUE_BAD, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 01/48] monitor: Factor monitor_set_error() out of qemu_error_internal(), Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 22/48] qdev: Fix -device and device_add to handle unsuitable bus gracefully, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 24/48] qdev: Hide "no_user" devices from users, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 44/48] qemu-option: Move the implied first name into QemuOptsList, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 25/48] qdev: Hide "ptr" properties from users, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 46/48] monitor: New argument type 'O', Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 43/48] qemu-option: Functions to convert to/from QDict., Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 30/48] qdev: Relax parsing of bus option,
Markus Armbruster <=
- [Qemu-devel] [PATCH RFC 13/48] error: Make qemu_error() add a newline, strip it from arguments, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 26/48] error: Polish human-readable error descriptions, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 42/48] error: Convert do_device_add() to QError, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 48/48] monitor: convert do_device_add() to QObject, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 18/48] error: Include the program name in error messages to stderr, Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 35/48] monitor: New in_qmp_mon(), Markus Armbruster, 2010/02/24
- [Qemu-devel] [PATCH RFC 38/48] error: New QERR_BUS_NO_HOTPLUG, Markus Armbruster, 2010/02/24