Am 02.03.2017 um 22:43 hat Markus Armbruster geschrieben: > Errors in the pseudo-filename are all reported with the same laconic > "Can't parse filename" message. > > Add real error reporting, such as: > > $ qemu-system-x86_64 --drive driver=sheepdog,filename=sheepdog:/// > qemu-system-x86_64: --drive driver=sheepdog,filename=sheepdog:///: > missing file path in URI > $ qemu-system-x86_64 --drive driver=sheepdog,filename=sheepgod:///vdi > qemu-system-x86_64: --drive driver=sheepdog,filename=sheepgod:///vdi: URI > scheme must be 'sheepdog', 'sheepdog+tcp', or 'sheepdog+unix' > $ qemu-system-x86_64 --drive > driver=sheepdog,filename=sheepdog+unix:///vdi?socke=sheepdog.sock > qemu-system-x86_64: --drive > driver=sheepdog,filename=sheepdog+unix:///vdi?socke=sheepdog.sock: unexpected > query parameters > > The code to translate legacy syntax to URI fails to escape URI > meta-characters. The new error messages are misleading then. Replace > them by the old "Can't parse filename" message. "Internal error" > would be more honest. Anyway, no worse than before. Also add a FIXME > comment. > > Signed-off-by: Markus Armbruster <arm...@redhat.com>
> @@ -1451,12 +1480,12 @@ static int sd_open(BlockDriverState *bs, QDict > *options, int flags, > memset(tag, 0, sizeof(tag)); > > if (strstr(filename, "://")) { > - ret = sd_parse_uri(s, filename, vdi, &snapid, tag); > + sd_parse_uri(s, filename, vdi, &snapid, tag, &local_err); > } else { > - ret = parse_vdiname(s, filename, vdi, &snapid, tag); > + parse_vdiname(s, filename, vdi, &snapid, tag, &local_err); > } > - if (ret < 0) { > - error_setg(errp, "Can't parse filename"); > + if (local_err) { > + error_propagate(errp, local_err); > goto out_no_fd; > } I have to take my R-b back, ret isn't set here any more: block/sheepdog.c: In function 'sd_open': block/sheepdog.c:1451:9: error: 'ret' may be used uninitialized in this function [-Werror=maybe-uninitialized] int ret, fd; Kevin