From: Markus Armbruster Date: Mon, 19 May 2014 16:57:35 +0000 (+0200) Subject: char: Clean up fragile use of error_is_set() X-Git-Tag: v2.1.0-rc0~111^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0aff637e920c0cdb74338c6f57005f2d7cab63d6;p=thirdparty%2Fqemu.git char: Clean up fragile use of error_is_set() Using error_is_set(ERRP) to find out whether a function failed is either wrong, fragile, or unnecessarily opaque. It's wrong when ERRP may be null, because errors go undetected when it is. It's fragile when proving ERRP non-null involves a non-local argument. Else, it's unnecessarily opaque (see commit 84d18f0). The error_is_set(errp) in qemu_chr_new_from_opts() is merely fragile, because the callers never pass a null errp argument. Make the code more robust and more obviously correct: receive the error in a local variable, then propagate it through the parameter. Signed-off-by: Markus Armbruster Signed-off-by: Gerd Hoffmann --- diff --git a/qemu-char.c b/qemu-char.c index 3eaefc9244b..5a7975f3939 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -3204,6 +3204,7 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, void (*init)(struct CharDriverState *s), Error **errp) { + Error *local_err = NULL; CharDriver *cd; CharDriverState *chr; GSList *i; @@ -3245,8 +3246,9 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, chr = NULL; backend->kind = cd->kind; if (cd->parse) { - cd->parse(opts, backend, errp); - if (error_is_set(errp)) { + cd->parse(opts, backend, &local_err); + if (local_err) { + error_propagate(errp, local_err); goto qapi_out; } }