mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
virsh: Add helper to request string arguments with error reporting
This patch adds a helper function with similar semantics to vshCommandOptString that requests a string argument, but does some error reporting without the need to do it in the functions themselves. The error reporting also provides information about the parameter whose retrieval failed.
This commit is contained in:
parent
d1de0c3d1a
commit
41b5e8451b
@ -1416,6 +1416,58 @@ vshCommandOptString(const vshCmd *cmd, const char *name, const char **value)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vshCommandOptStringReq:
|
||||||
|
* @ctl virsh control structure
|
||||||
|
* @cmd command structure
|
||||||
|
* @name option name
|
||||||
|
* @value result (updated to NULL or the option argument)
|
||||||
|
*
|
||||||
|
* Gets a option argument as string.
|
||||||
|
*
|
||||||
|
* Returns 0 on success or when the option is not present and not
|
||||||
|
* required, *value is set to the option argument. On error -1 is
|
||||||
|
* returned and error message printed.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vshCommandOptStringReq(vshControl *ctl,
|
||||||
|
const vshCmd *cmd,
|
||||||
|
const char *name,
|
||||||
|
const char **value)
|
||||||
|
{
|
||||||
|
vshCmdOpt *arg;
|
||||||
|
int ret;
|
||||||
|
const char *error = NULL;
|
||||||
|
|
||||||
|
/* clear out the value */
|
||||||
|
*value = NULL;
|
||||||
|
|
||||||
|
ret = vshCommandOpt(cmd, name, &arg);
|
||||||
|
/* option is not required and not present */
|
||||||
|
if (ret == 0)
|
||||||
|
return 0;
|
||||||
|
/* this should not be propagated here, just to be sure */
|
||||||
|
if (ret == -1)
|
||||||
|
error = N_("Mandatory option not present");
|
||||||
|
|
||||||
|
if (ret == -2)
|
||||||
|
error = N_("Programming error: Invalid option name");
|
||||||
|
|
||||||
|
if (!arg->data)
|
||||||
|
error = N_("Programming error: Requested option is a boolean");
|
||||||
|
|
||||||
|
if (!*arg->data && !(arg->def->flags & VSH_OFLAG_EMPTY_OK))
|
||||||
|
error = N_("Option argument is empty");
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
vshError(ctl, _("Failed to get option '%s': %s"), name, _(error));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*value = arg->data;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vshCommandOptLongLong:
|
* vshCommandOptLongLong:
|
||||||
* @cmd command reference
|
* @cmd command reference
|
||||||
|
@ -275,6 +275,10 @@ int vshCommandOptUL(const vshCmd *cmd, const char *name,
|
|||||||
int vshCommandOptString(const vshCmd *cmd, const char *name,
|
int vshCommandOptString(const vshCmd *cmd, const char *name,
|
||||||
const char **value)
|
const char **value)
|
||||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
int vshCommandOptStringReq(vshControl *ctl, const vshCmd *cmd,
|
||||||
|
const char *name, const char **value)
|
||||||
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
|
||||||
|
ATTRIBUTE_NONNULL(4) ATTRIBUTE_RETURN_CHECK;
|
||||||
int vshCommandOptLongLong(const vshCmd *cmd, const char *name,
|
int vshCommandOptLongLong(const vshCmd *cmd, const char *name,
|
||||||
long long *value)
|
long long *value)
|
||||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
Loading…
Reference in New Issue
Block a user