[libvirt] [PATCH 1/7] virsh: Make vshCommandOpt* report error
Ján Tomko
jtomko at redhat.com
Fri Apr 4 09:12:26 UTC 2014
On 04/02/2014 02:43 PM, Michal Privoznik wrote:
> Currently, the virsh code is plenty of the following pattern:
>
> if (vshCommandOptUInt(..) < 0) {
> vshError(...);
> goto cleanup;
> }
>
> It doesn't make much sense to repeat the code everywhere.
> Moreover, some functions from the family already report
> error some of them don't.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> tests/vcpupin | 1 +
> tools/virsh.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
vshCommandOptTimeoutToMs also calls vshCommandOptInt
> tools/virsh.h | 2 +-
> 3 files changed, 67 insertions(+), 8 deletions(-)
>
> diff --git a/tests/vcpupin b/tests/vcpupin
> index f1fb038..a616216 100755
> --- a/tests/vcpupin
> +++ b/tests/vcpupin
> @@ -34,6 +34,7 @@ fail=0
> $abs_top_builddir/tools/virsh --connect test:///default vcpupin test a 0,1 > out 2>&1
> test $? = 1 || fail=1
> cat <<\EOF > exp || fail=1
> +error: Unable to parse integer parameter to --vcpu
> error: vcpupin: Invalid or missing vCPU number.
>
> EOF
> diff --git a/tools/virsh.c b/tools/virsh.c
> index f2e4c4a..1371abb 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -1489,8 +1489,18 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
> if (ret <= 0)
> return ret;
>
> - if (virStrToLong_i(arg->data, NULL, 10, value) < 0)
> + if (virStrToLong_i(arg->data, NULL, 10, value) < 0) {
> + if (arg->def->flags & VSH_OFLAG_REQ) {
> + vshError(NULL,
ctl should be used for reporting errors, just like in vshCommandOptStringReq.
> + _("missing --%s parameter value"),
> + name);
Missing values are caught in vshCommandParse. The error should be the same
regardless of VSH_OFLAG_REQ.
> + } else {
> + vshError(NULL,
> + _("Unable to parse integer parameter to --%s"),
> + name);
>
> @@ -1692,9 +1742,17 @@ vshCommandOptScaledInt(const vshCmd *cmd, const char *name,
> ret = vshCommandOptString(cmd, name, &str);
> if (ret <= 0)
> return ret;
> - if (virStrToLong_ull(str, &end, 10, value) < 0 ||
> - virScaleInteger(value, end, scale, max) < 0)
> + if (virStrToLong_ull(str, &end, 10, value) < 0) {
> + vshError(NULL,
> + _("Unable to parse integer parameter to --%s"),
> + name);
> return -1;
> + }
> +
> + if (virScaleInteger(value, end, scale, max) < 0) {
> + /* Error reported by the helper. */
Needs vshReportError to propagate the error.
> + return -1;
> + }
> return 1;
> }
>
> diff --git a/tools/virsh.h b/tools/virsh.h
> index 3e0251b..6eb17b3 100644
> --- a/tools/virsh.h
> +++ b/tools/virsh.h
> @@ -168,7 +168,7 @@ struct _vshCmdInfo {
> struct _vshCmdOptDef {
> const char *name; /* the name of option, or NULL for list end */
> vshCmdOptType type; /* option type */
> - unsigned int flags; /* flags */
> + unsigned int flags; /* bitwise OR of VSH_OFLAG_**/
> const char *help; /* non-NULL help string; or for VSH_OT_ALIAS
> * the name of a later public option */
> vshCompleter completer; /* option completer */
>
You can push this hunk separately as trivial.
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140404/8dbfa0f8/attachment-0001.sig>
More information about the libvir-list
mailing list