[libvirt] [PATCH 15/17] virsh-snapshot: Update snapshot commands to use vshCommandOptStringReq

Osier Yang jyang at redhat.com
Thu Jan 31 07:08:58 UTC 2013


On 2013年01月22日 02:07, Peter Krempa wrote:
> also avoids potential NULL pointer dereference:
>
> $ virsh snapshot-current asdf ""
> error: invalid snapshotname argument '(null)'
>
> by removing the error message in favor of vshCommandOptStringReq
> ---
>   tools/virsh-snapshot.c | 21 +++++++--------------
>   1 file changed, 7 insertions(+), 14 deletions(-)
>
> diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
> index c980b5b..ba57059 100644
> --- a/tools/virsh-snapshot.c
> +++ b/tools/virsh-snapshot.c
> @@ -207,7 +207,7 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
>       if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
>           goto cleanup;
>
> -    if (vshCommandOptString(cmd, "xmlfile",&from)<= 0) {
> +    if (vshCommandOptStringReq(ctl, cmd, "xmlfile",&from)<  0) {
>           buffer = vshStrdup(ctl, "<domainsnapshot/>");
>       } else {
>           if (virFileReadAll(from, VSH_MAX_XML_FILE,&buffer)<  0) {
> @@ -431,11 +431,9 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
>       if (dom == NULL)
>           goto cleanup;
>
> -    if (vshCommandOptString(cmd, "name",&name)<  0 ||
> -        vshCommandOptString(cmd, "description",&desc)<  0) {
> -        vshError(ctl, _("argument must not be empty"));
> +    if (vshCommandOptStringReq(ctl, cmd, "name",&name)<  0 ||
> +        vshCommandOptStringReq(ctl, cmd, "description",&desc)<  0)
>           goto cleanup;
> -    }
>
>       virBufferAddLit(&buf, "<domainsnapshot>\n");
>       if (name)
> @@ -443,10 +441,8 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
>       if (desc)
>           virBufferEscapeString(&buf, "<description>%s</description>\n", desc);
>
> -    if (vshCommandOptString(cmd, "memspec",&memspec)<  0) {
> -        vshError(ctl, _("memspec argument must not be empty"));
> +    if (vshCommandOptStringReq(ctl, cmd, "memspec",&memspec)<  0)
>           goto cleanup;
> -    }
>
>       if (memspec&&  vshParseSnapshotMemspec(ctl,&buf, memspec)<  0)
>           goto cleanup;
> @@ -496,10 +492,8 @@ vshLookupSnapshot(vshControl *ctl, const vshCmd *cmd,
>       bool current = vshCommandOptBool(cmd, "current");
>       const char *snapname = NULL;
>
> -    if (vshCommandOptString(cmd, arg,&snapname)<  0) {
> -        vshError(ctl, _("invalid argument for --%s"), arg);
> +    if (vshCommandOptStringReq(ctl, cmd, arg,&snapname)<  0)
>           return -1;
> -    }
>
>       if (exclusive&&  current&&  snapname) {
>           vshError(ctl, _("--%s and --current are mutually exclusive"), arg);
> @@ -703,10 +697,9 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
>       if (dom == NULL)
>           goto cleanup;
>
> -    if (vshCommandOptString(cmd, "snapshotname",&snapshotname)<  0) {
> -        vshError(ctl, _("invalid snapshotname argument '%s'"), snapshotname);
> +    if (vshCommandOptStringReq(ctl, cmd, "snapshotname",&snapshotname)<  0)
>           goto cleanup;
> -    }
> +
>       if (snapshotname) {
>           virDomainSnapshotPtr snapshot2 = NULL;
>           flags = (VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE |

ACK




More information about the libvir-list mailing list