qdev: Relax parsing of bus option
Treat multiple successive slashes as a one slash. Ignore trailing slashes. This is how POSIX pathnames work.
This commit is contained in:
parent
fdcfa190ab
commit
fc98eb430e
26
hw/qdev.c
26
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) {
|
||||
error_report("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) {
|
||||
error_report("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) {
|
||||
error_report("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);
|
||||
|
Loading…
Reference in New Issue
Block a user