This is needed to detect situations when optional argument was
specified with non-integer value: '--int-opt foo'. To keep functions
uniform vshCommandOptString function was also changed, because it
returns tri-state value as well. Given result pointer is updated only
in case of success. If parsing fails, result is not updated at all.
---
tools/virsh.c | 613 ++++++++++++++++++++++++++-------------------------------
1 files changed, 280 insertions(+), 333 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 6ad4089..c746073 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -252,13 +252,14 @@ static const vshCmdGrp *vshCmdGrpSearch(const char *grpname);
static int vshCmdGrpHelp(vshControl *ctl, const char *name);
static vshCmdOpt *vshCommandOpt(const vshCmd *cmd, const char *name);
-static int vshCommandOptInt(const vshCmd *cmd, const char *name, int *found);
-static unsigned long vshCommandOptUL(const vshCmd *cmd, const char *name,
- int *found);
-static const char *vshCommandOptString(const vshCmd *cmd, const char *name,
- int *found);
-static long long vshCommandOptLongLong(const vshCmd *cmd, const char *name,
- int *found);
+static int vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
+ ATTRIBUTE_NONNULL(3);
+static int vshCommandOptUL(const vshCmd *cmd, const char *name,
+ unsigned long *value) ATTRIBUTE_NONNULL(3);
+static int vshCommandOptString(const vshCmd *cmd, const char *name,
+ const char **value) ATTRIBUTE_NONNULL(3);
+static int vshCommandOptLongLong(const vshCmd *cmd, const char *name,
+ unsigned long long *value) ATTRIBUTE_NONNULL(3);
static int vshCommandOptBool(const vshCmd *cmd, const char *name);
static char *vshCommandOptArgv(const vshCmd *cmd, int count);
@@ -589,11 +590,9 @@ static const vshCmdOptDef opts_help[] = {
static int
cmdHelp(vshControl *ctl, const vshCmd *cmd)
{
- const char *name;
-
- name = vshCommandOptString(cmd, "command", NULL);
+ const char *name = NULL;
- if (!name) {
+ if (vshCommandOptString(cmd, "command", &name) <= 0) {
const vshCmdGrp *grp;
const vshCmdDef *def;
@@ -692,7 +691,7 @@ static int
cmdConnect(vshControl *ctl, const vshCmd *cmd)
{
int ro = vshCommandOptBool(cmd, "readonly");
- const char *name;
+ const char *name = NULL;
if (ctl->conn) {
int ret;
@@ -704,8 +703,7 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
}
VIR_FREE(ctl->name);
- name = vshCommandOptString(cmd, "name", NULL);
- if (!name)
+ if (vshCommandOptString(cmd, "name", &name) <= 0)
return FALSE;
ctl->name = vshStrdup(ctl, name);
@@ -773,7 +771,7 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
int ret;
- const char *name;
+ const char *name = NULL;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -781,7 +779,7 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- name = vshCommandOptString(cmd, "devname", NULL);
+ vshCommandOptString(cmd, "devname", &name);
ret = cmdRunConsole(ctl, dom, name);
@@ -964,7 +962,7 @@ static int
cmdDomblkstat (vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *name, *device;
+ const char *name = NULL, *device = NULL;
struct _virDomainBlockStats stats;
if (!vshConnectionUsability (ctl, ctl->conn))
@@ -973,7 +971,7 @@ cmdDomblkstat (vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain (ctl, cmd, &name)))
return FALSE;
- if (!(device = vshCommandOptString (cmd, "device", NULL))) {
+ if (vshCommandOptString (cmd, "device", &device) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -1021,7 +1019,7 @@ static int
cmdDomIfstat (vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *name, *device;
+ const char *name = NULL, *device = NULL;
struct _virDomainInterfaceStats stats;
if (!vshConnectionUsability (ctl, ctl->conn))
@@ -1030,7 +1028,7 @@ cmdDomIfstat (vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain (ctl, cmd, &name)))
return FALSE;
- if (!(device = vshCommandOptString (cmd, "interface", NULL))) {
+ if (vshCommandOptString (cmd, "interface", &device) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -1144,7 +1142,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd)
virDomainBlockInfo info;
virDomainPtr dom;
int ret = TRUE;
- const char *device;
+ const char *device = NULL;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -1152,7 +1150,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- if (!(device = vshCommandOptString (cmd, "device", NULL))) {
+ if (vshCommandOptString (cmd, "device", &device) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -1230,8 +1228,7 @@ static int
cmdCreate(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
#ifndef WIN32
@@ -1242,8 +1239,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -1288,16 +1284,14 @@ static int
cmdDefine(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -1336,15 +1330,13 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
int ret = TRUE;
- const char *name;
- int found;
+ const char *name = NULL;
int id;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- name = vshCommandOptString(cmd, "domain", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "domain", &name) <= 0)
return FALSE;
if (name && virStrToLong_i(name, NULL, 10, &id) == 0
@@ -1454,14 +1446,14 @@ static int
cmdSave(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *name;
- const char *to;
+ const char *name = NULL;
+ const char *to = NULL;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(to = vshCommandOptString(cmd, "file", NULL)))
+ if (vshCommandOptString(cmd, "file", &to) <= 0)
return FALSE;
if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
@@ -1594,16 +1586,14 @@ static int
cmdSchedInfoUpdate(vshControl *ctl, const vshCmd *cmd,
virSchedParameterPtr param)
{
- int found;
- const char *data;
+ const char *data = NULL;
/* Legacy 'weight' parameter */
if (STREQ(param->field, "weight") &&
param->type == VIR_DOMAIN_SCHED_FIELD_UINT &&
vshCommandOptBool(cmd, "weight")) {
int val;
- val = vshCommandOptInt(cmd, "weight", &found);
- if (!found) {
+ if (vshCommandOptInt(cmd, "weight", &val) <= 0) {
vshError(ctl, "%s", _("Invalid value of weight"));
return -1;
} else {
@@ -1617,8 +1607,7 @@ cmdSchedInfoUpdate(vshControl *ctl, const vshCmd *cmd,
param->type == VIR_DOMAIN_SCHED_FIELD_UINT &&
vshCommandOptBool(cmd, "cap")) {
int val;
- val = vshCommandOptInt(cmd, "cap", &found);
- if (!found) {
+ if (vshCommandOptInt(cmd, "cap", &val) <= 0) {
vshError(ctl, "%s", _("Invalid value of cap"));
return -1;
} else {
@@ -1627,7 +1616,7 @@ cmdSchedInfoUpdate(vshControl *ctl, const vshCmd *cmd,
return 1;
}
- if ((data = vshCommandOptString(cmd, "set", NULL))) {
+ if (vshCommandOptString(cmd, "set", &data) > 0) {
char *val = strchr(data, '=');
int match = 0;
if (!val) {
@@ -1746,8 +1735,8 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)
/* See if we've tried to --set var=val. If so, the fact that
we reach this point (with update == 0) means that "var" did
not match any of the settable parameters. Report the error. */
- const char *var_value_pair = vshCommandOptString(cmd, "set",
NULL);
- if (var_value_pair) {
+ const char *var_value_pair = NULL;
+ if (vshCommandOptString(cmd, "set", &var_value_pair) > 0) {
vshError(ctl, _("invalid scheduler option: %s"),
var_value_pair);
goto cleanup;
@@ -1804,15 +1793,13 @@ static const vshCmdOptDef opts_restore[] = {
static int
cmdRestore(vshControl *ctl, const vshCmd *cmd)
{
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virDomainRestore(ctl->conn, from) == 0) {
@@ -1845,15 +1832,15 @@ static int
cmdDump(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *name;
- const char *to;
+ const char *name = NULL;
+ const char *to = NULL;
int ret = TRUE;
int flags = 0;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(to = vshCommandOptString(cmd, "file", NULL)))
+ if (vshCommandOptString(cmd, "file", &to) <= 0)
return FALSE;
if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
@@ -2300,7 +2287,10 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- cell = vshCommandOptInt(cmd, "cellno", &cell_given);
+ if ( (cell_given = vshCommandOptInt(cmd, "cellno", &cell)) < 0) {
+ vshError(ctl, "%s", _("cell number has to be a number"));
+ goto cleanup;
+ }
all_given = vshCommandOptBool(cmd, "all");
if (all_given && cell_given) {
@@ -2412,10 +2402,10 @@ static const vshCmdOptDef opts_maxvcpus[] = {
static int
cmdMaxvcpus(vshControl *ctl, const vshCmd *cmd)
{
- const char *type;
+ const char *type = NULL;
int vcpus;
- type = vshCommandOptString(cmd, "type", NULL);
+ vshCommandOptString(cmd, "type", &type);
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -2712,9 +2702,8 @@ cmdVcpupin(vshControl *ctl, const vshCmd *cmd)
virDomainPtr dom;
virNodeInfo nodeinfo;
int vcpu;
- const char *cpulist;
+ const char *cpulist = NULL;
int ret = TRUE;
- int vcpufound = 0;
unsigned char *cpumap;
int cpumaplen;
int i;
@@ -2726,14 +2715,13 @@ cmdVcpupin(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- vcpu = vshCommandOptInt(cmd, "vcpu", &vcpufound);
- if (!vcpufound) {
+ if (vshCommandOptInt(cmd, "vcpu", &vcpu) <= 0) {
vshError(ctl, "%s", _("vcpupin: Invalid or missing vCPU
number."));
virDomainFree(dom);
return FALSE;
}
- if (!(cpulist = vshCommandOptString(cmd, "cpulist", NULL))) {
+ if (vshCommandOptString(cmd, "cpulist", &cpulist) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -2862,7 +2850,7 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- count = vshCommandOptInt(cmd, "count", &count);
+ vshCommandOptInt(cmd, "count", &count);
if (!flags) {
if (virDomainSetVcpus(dom, count) != 0) {
@@ -2918,7 +2906,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
virDomainInfo info;
- unsigned long kilobytes;
+ unsigned long kilobytes = 0;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -2927,7 +2915,11 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- kilobytes = vshCommandOptUL(cmd, "kilobytes", NULL);
+ if (vshCommandOptUL(cmd, "kilobytes", &kilobytes) < 0) {
+ vshError(ctl, "%s", _("memory size has to be a number"));
+ return FALSE;
+ }
+
if (kilobytes <= 0) {
virDomainFree(dom);
vshError(ctl, _("Invalid value of %lu for memory size"), kilobytes);
@@ -2975,7 +2967,7 @@ cmdSetmaxmem(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
virDomainInfo info;
- int kilobytes;
+ int kilobytes = 0;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -2984,7 +2976,11 @@ cmdSetmaxmem(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- kilobytes = vshCommandOptInt(cmd, "kilobytes", &kilobytes);
+ if (vshCommandOptInt(cmd, "kilobytes", &kilobytes) < 0) {
+ vshError(ctl, "%s", _("memory sizehas to be a number"));
+ return FALSE;
+ }
+
if (kilobytes <= 0) {
virDomainFree(dom);
vshError(ctl, _("Invalid value of %d for memory size"), kilobytes);
@@ -3043,7 +3039,7 @@ static int
cmdMemtune(vshControl * ctl, const vshCmd * cmd)
{
virDomainPtr dom;
- long long hard_limit, soft_limit, swap_hard_limit, min_guarantee;
+ long long hard_limit = 0, soft_limit = 0, swap_hard_limit = 0, min_guarantee = 0;
int nparams = 0;
unsigned int i = 0;
virMemoryParameterPtr params = NULL, temp = NULL;
@@ -3055,23 +3051,19 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- hard_limit =
- vshCommandOptLongLong(cmd, "hard-limit", NULL);
+ vshCommandOptLongLong(cmd, "hard-limit", (unsigned long long*)
&hard_limit);
if (hard_limit)
nparams++;
- soft_limit =
- vshCommandOptLongLong(cmd, "soft-limit", NULL);
+ vshCommandOptLongLong(cmd, "soft-limit", (unsigned long long*)
&soft_limit);
if (soft_limit)
nparams++;
- swap_hard_limit =
- vshCommandOptLongLong(cmd, "swap-hard-limit", NULL);
+ vshCommandOptLongLong(cmd, "swap-hard-limit", (unsigned long long*)
&swap_hard_limit);
if (swap_hard_limit)
nparams++;
- min_guarantee =
- vshCommandOptLongLong(cmd, "min-guarantee", NULL);
+ vshCommandOptLongLong(cmd, "min-guarantee", (unsigned long long*)
&min_guarantee);
if (min_guarantee)
nparams++;
@@ -3315,8 +3307,8 @@ static int
cmdDomXMLFromNative(vshControl *ctl, const vshCmd *cmd)
{
int ret = TRUE;
- const char *format;
- const char *configFile;
+ const char *format = NULL;
+ const char *configFile = NULL;
char *configData;
char *xmlData;
int flags = 0;
@@ -3324,8 +3316,8 @@ cmdDomXMLFromNative(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- format = vshCommandOptString(cmd, "format", NULL);
- configFile = vshCommandOptString(cmd, "config", NULL);
+ vshCommandOptString(cmd, "format", &format);
+ vshCommandOptString(cmd, "config", &configFile);
if (virFileReadAll(configFile, 1024*1024, &configData) < 0)
return FALSE;
@@ -3360,8 +3352,8 @@ static int
cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
{
int ret = TRUE;
- const char *format;
- const char *xmlFile;
+ const char *format = NULL;
+ const char *xmlFile = NULL;
char *configData;
char *xmlData;
int flags = 0;
@@ -3369,8 +3361,8 @@ cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- format = vshCommandOptString(cmd, "format", NULL);
- xmlFile = vshCommandOptString(cmd, "xml", NULL);
+ vshCommandOptString(cmd, "format", &format);
+ vshCommandOptString(cmd, "xml", &xmlFile);
if (virFileReadAll(xmlFile, 1024*1024, &xmlData) < 0)
return FALSE;
@@ -3525,10 +3517,10 @@ doMigrate (void *opaque)
{
char ret = '1';
virDomainPtr dom = NULL;
- const char *desturi;
- const char *migrateuri;
- const char *dname;
- int flags = 0, found;
+ const char *desturi = NULL;
+ const char *migrateuri = NULL;
+ const char *dname = NULL;
+ int flags = 0;
vshCtrlData *data = opaque;
vshControl *ctl = data->ctl;
const vshCmd *cmd = data->cmd;
@@ -3547,13 +3539,12 @@ doMigrate (void *opaque)
if (!(dom = vshCommandOptDomain (ctl, cmd, NULL)))
goto out;
- desturi = vshCommandOptString (cmd, "desturi", &found);
- if (!found)
+ if (vshCommandOptString (cmd, "desturi", &desturi) <= 0)
goto out;
- migrateuri = vshCommandOptString (cmd, "migrateuri", NULL);
+ vshCommandOptString (cmd, "migrateuri", &migrateuri);
- dname = vshCommandOptString (cmd, "dname", NULL);
+ vshCommandOptString (cmd, "dname", &dname);
if (vshCommandOptBool (cmd, "live"))
flags |= VIR_MIGRATE_LIVE;
@@ -3645,13 +3636,12 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
int ret = -1;
virThread workerThread;
struct pollfd pollfd;
- int found;
char retchar;
struct sigaction sig_action;
struct sigaction old_sig_action;
virDomainJobInfo jobinfo;
bool verbose = false;
- int timeout;
+ int timeout = 0;
struct timeval start, curr;
bool live_flag = false;
vshCtrlData data;
@@ -3670,8 +3660,7 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool (cmd, "live"))
live_flag = TRUE;
- timeout = vshCommandOptInt(cmd, "timeout", &found);
- if (found) {
+ if (vshCommandOptInt(cmd, "timeout", &timeout) > 0) {
if (! live_flag) {
vshError(ctl, "%s", _("migrate: Unexpected timeout for offline
migration"));
goto cleanup;
@@ -3687,8 +3676,6 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
vshError(ctl, "%s", _("migrate: Timeout is too big"));
goto cleanup;
}
- } else {
- timeout = 0;
}
if (pipe(p) < 0)
@@ -3797,8 +3784,7 @@ static int
cmdMigrateSetMaxDowntime(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
- long long downtime;
- int found;
+ long long downtime = 0;
int ret = FALSE;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -3807,8 +3793,8 @@ cmdMigrateSetMaxDowntime(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- downtime = vshCommandOptLongLong(cmd, "downtime", &found);
- if (!found || downtime < 1) {
+ vshCommandOptLongLong(cmd, "downtime", (unsigned long long*)
&downtime);
+ if (downtime < 1) {
vshError(ctl, "%s", _("migrate: Invalid downtime"));
goto done;
}
@@ -3890,16 +3876,14 @@ static int
cmdNetworkCreate(vshControl *ctl, const vshCmd *cmd)
{
virNetworkPtr network;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -3938,16 +3922,14 @@ static int
cmdNetworkDefine(vshControl *ctl, const vshCmd *cmd)
{
virNetworkPtr network;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -4711,16 +4693,14 @@ static int
cmdInterfaceDefine(vshControl *ctl, const vshCmd *cmd)
{
virInterfacePtr iface;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -4873,16 +4853,14 @@ static int
cmdNWFilterDefine(vshControl *ctl, const vshCmd *cmd)
{
virNWFilterPtr nwfilter;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -5214,16 +5192,14 @@ static int
cmdPoolCreate(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr pool;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -5266,18 +5242,15 @@ static int
cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
{
virNodeDevicePtr dev = NULL;
- const char *from;
- int found = 0;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
- }
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
@@ -5319,17 +5292,14 @@ cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
{
virNodeDevicePtr dev = NULL;
int ret = TRUE;
- int found = 0;
- const char *name;
+ const char *name = NULL;
if (!vshConnectionUsability(ctl, ctl->conn)) {
return FALSE;
}
- name = vshCommandOptString(cmd, "name", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "name", &name) <= 0)
return FALSE;
- }
dev = virNodeDeviceLookupByName(ctl->conn, name);
@@ -5363,23 +5333,21 @@ static const vshCmdOptDef opts_pool_X_as[] = {
static int buildPoolXML(const vshCmd *cmd, const char **retname, char **xml) {
- int found;
- const char *name, *type, *srcHost, *srcPath, *srcDev, *srcName, *srcFormat, *target;
+ const char *name = NULL, *type = NULL, *srcHost = NULL, *srcPath = NULL,
+ *srcDev = NULL, *srcName = NULL, *srcFormat = NULL, *target = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER;
- name = vshCommandOptString(cmd, "name", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "name", &name) <= 0)
goto cleanup;
- type = vshCommandOptString(cmd, "type", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "type", &type) <= 0)
goto cleanup;
- srcHost = vshCommandOptString(cmd, "source-host", &found);
- srcPath = vshCommandOptString(cmd, "source-path", &found);
- srcDev = vshCommandOptString(cmd, "source-dev", &found);
- srcName = vshCommandOptString(cmd, "source-name", &found);
- srcFormat = vshCommandOptString(cmd, "source-format", &found);
- target = vshCommandOptString(cmd, "target", &found);
+ vshCommandOptString(cmd, "source-host", &srcHost);
+ vshCommandOptString(cmd, "source-path", &srcPath);
+ vshCommandOptString(cmd, "source-dev", &srcDev);
+ vshCommandOptString(cmd, "source-name", &srcName);
+ vshCommandOptString(cmd, "source-format", &srcFormat);
+ vshCommandOptString(cmd, "target", &target);
virBufferVSprintf(&buf, "<pool type='%s'>\n", type);
virBufferVSprintf(&buf, " <name>%s</name>\n", name);
@@ -5480,16 +5448,14 @@ static int
cmdPoolDefine(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr pool;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -6178,29 +6144,22 @@ static const vshCmdOptDef opts_find_storage_pool_sources_as[] = {
static int
cmdPoolDiscoverSourcesAs(vshControl * ctl, const vshCmd * cmd ATTRIBUTE_UNUSED)
{
- const char *type, *host;
+ const char *type = NULL, *host = NULL;
char *srcSpec = NULL;
char *srcList;
- const char *initiator;
- int found;
+ const char *initiator = NULL;
- type = vshCommandOptString(cmd, "type", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "type", &type) <= 0)
return FALSE;
- host = vshCommandOptString(cmd, "host", &found);
- if (!found)
- host = NULL;
- initiator = vshCommandOptString(cmd, "initiator", &found);
- if (!found)
- initiator = NULL;
+ vshCommandOptString(cmd, "host", &host);
+ vshCommandOptString(cmd, "initiator", &initiator);
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
if (host) {
- const char *port = vshCommandOptString(cmd, "port", &found);
- if (!found)
- port = NULL;
+ const char *port = NULL;
+ vshCommandOptString(cmd, "port", &port);
virBuffer buf = VIR_BUFFER_INITIALIZER;
virBufferAddLit(&buf, "<source>\n");
virBufferVSprintf(&buf, " <host name='%s'", host);
@@ -6253,16 +6212,13 @@ static const vshCmdOptDef opts_find_storage_pool_sources[] = {
static int
cmdPoolDiscoverSources(vshControl * ctl, const vshCmd * cmd ATTRIBUTE_UNUSED)
{
- const char *type, *srcSpecFile;
+ const char *type = NULL, *srcSpecFile = NULL;
char *srcSpec = NULL, *srcList;
- int found;
- type = vshCommandOptString(cmd, "type", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "type", &type) <= 0)
return FALSE;
- srcSpecFile = vshCommandOptString(cmd, "srcSpec", &found);
- if (!found)
- srcSpecFile = NULL;
+
+ vshCommandOptString(cmd, "srcSpec", &srcSpecFile);
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -6503,10 +6459,9 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr pool;
virStorageVolPtr vol;
- int found;
char *xml;
- const char *name, *capacityStr, *allocationStr, *format;
- const char *snapshotStrVol, *snapshotStrFormat;
+ const char *name, *capacityStr = NULL, *allocationStr = NULL, *format = NULL;
+ const char *snapshotStrVol = NULL, *snapshotStrFormat = NULL;
unsigned long long capacity, allocation = 0;
virBuffer buf = VIR_BUFFER_INITIALIZER;
@@ -6517,24 +6472,21 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
VSH_BYNAME)))
return FALSE;
- name = vshCommandOptString(cmd, "name", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "name", &name) <= 0)
goto cleanup;
- capacityStr = vshCommandOptString(cmd, "capacity", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "capacity", &capacityStr) <= 0)
goto cleanup;
if (cmdVolSize(capacityStr, &capacity) < 0)
vshError(ctl, _("Malformed size %s"), capacityStr);
- allocationStr = vshCommandOptString(cmd, "allocation", &found);
- if (allocationStr &&
- cmdVolSize(allocationStr, &allocation) < 0)
+ if ((vshCommandOptString(cmd, "allocation", &allocationStr) > 0)
&&
+ (cmdVolSize(allocationStr, &allocation) < 0))
vshError(ctl, _("Malformed size %s"), allocationStr);
- format = vshCommandOptString(cmd, "format", &found);
- snapshotStrVol = vshCommandOptString(cmd, "backing-vol", &found);
- snapshotStrFormat = vshCommandOptString(cmd, "backing-vol-format",
&found);
+ vshCommandOptString(cmd, "format", &format);
+ vshCommandOptString(cmd, "backing-vol", &snapshotStrVol);
+ vshCommandOptString(cmd, "backing-vol-format", &snapshotStrFormat);
virBufferAddLit(&buf, "<volume>\n");
virBufferVSprintf(&buf, " <name>%s</name>\n", name);
@@ -6725,8 +6677,7 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr pool;
virStorageVolPtr vol;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
@@ -6737,8 +6688,7 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
VSH_BYNAME)))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0) {
virStoragePoolFree(pool);
return FALSE;
}
@@ -6786,8 +6736,7 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr pool = NULL;
virStorageVolPtr newvol = NULL, inputvol = NULL;
- const char *from;
- int found;
+ const char *from = NULL;
int ret = FALSE;
char *buffer = NULL;
@@ -6797,8 +6746,7 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
if (!(pool = vshCommandOptPoolBy(ctl, cmd, "pool", NULL, VSH_BYNAME)))
goto cleanup;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0) {
goto cleanup;
}
@@ -6885,10 +6833,9 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
{
virStoragePoolPtr origpool = NULL;
virStorageVolPtr origvol = NULL, newvol = NULL;
- const char *name;
+ const char *name = NULL;
char *origxml = NULL;
xmlChar *newxml = NULL;
- int found;
int ret = FALSE;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -6903,8 +6850,7 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
}
- name = vshCommandOptString(cmd, "newname", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "newname", &name) <= 0)
goto cleanup;
origxml = virStorageVolGetXMLDesc(origvol, 0);
@@ -7572,7 +7518,7 @@ static const vshCmdOptDef opts_secret_define[] = {
static int
cmdSecretDefine(vshControl *ctl, const vshCmd *cmd)
{
- const char *from;
+ const char *from = NULL;
char *buffer;
virSecretPtr res;
char uuid[VIR_UUID_STRING_BUFLEN];
@@ -7580,8 +7526,7 @@ cmdSecretDefine(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", NULL);
- if (!from)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -7664,9 +7609,9 @@ cmdSecretSetValue(vshControl *ctl, const vshCmd *cmd)
{
virSecretPtr secret;
size_t value_size;
- const char *base64;
+ const char *base64 = NULL;
char *value;
- int found, res, ret = FALSE;
+ int res, ret = FALSE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -7675,8 +7620,7 @@ cmdSecretSetValue(vshControl *ctl, const vshCmd *cmd)
if (secret == NULL)
return FALSE;
- base64 = vshCommandOptString(cmd, "base64", &found);
- if (!base64)
+ if (vshCommandOptString(cmd, "base64", &base64) <= 0)
goto cleanup;
if (!base64_decode_alloc(base64, strlen(base64), &value, &value_size)) {
@@ -8041,16 +7985,15 @@ cmdNodeListDevicesPrint(vshControl *ctl,
static int
cmdNodeListDevices (vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
{
- const char *cap;
+ const char *cap = NULL;
char **devices;
- int found, num_devices, i;
+ int num_devices, i;
int tree = vshCommandOptBool(cmd, "tree");
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- cap = vshCommandOptString(cmd, "cap", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "cap", &cap) <= 0)
cap = NULL;
num_devices = virNodeNumOfDevices(ctl->conn, cap, 0);
@@ -8129,13 +8072,13 @@ static const vshCmdOptDef opts_node_device_dumpxml[] = {
static int
cmdNodeDeviceDumpXML (vshControl *ctl, const vshCmd *cmd)
{
- const char *name;
+ const char *name = NULL;
virNodeDevicePtr device;
char *xml;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(name = vshCommandOptString(cmd, "device", NULL)))
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
return FALSE;
if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
@@ -8172,13 +8115,13 @@ static const vshCmdOptDef opts_node_device_dettach[] = {
static int
cmdNodeDeviceDettach (vshControl *ctl, const vshCmd *cmd)
{
- const char *name;
+ const char *name = NULL;
virNodeDevicePtr device;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(name = vshCommandOptString(cmd, "device", NULL)))
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
return FALSE;
if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
@@ -8213,13 +8156,13 @@ static const vshCmdOptDef opts_node_device_reattach[] = {
static int
cmdNodeDeviceReAttach (vshControl *ctl, const vshCmd *cmd)
{
- const char *name;
+ const char *name = NULL;
virNodeDevicePtr device;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(name = vshCommandOptString(cmd, "device", NULL)))
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
return FALSE;
if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
@@ -8254,13 +8197,13 @@ static const vshCmdOptDef opts_node_device_reset[] = {
static int
cmdNodeDeviceReset (vshControl *ctl, const vshCmd *cmd)
{
- const char *name;
+ const char *name = NULL;
virNodeDevicePtr device;
int ret = TRUE;
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (!(name = vshCommandOptString(cmd, "device", NULL)))
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
return FALSE;
if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
@@ -8521,10 +8464,9 @@ static int
cmdAttachDevice(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *from;
+ const char *from = NULL;
char *buffer;
int ret = TRUE;
- int found;
unsigned int flags;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -8533,8 +8475,7 @@ cmdAttachDevice(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -8588,10 +8529,9 @@ static int
cmdDetachDevice(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *from;
+ const char *from = NULL;
char *buffer;
int ret = TRUE;
- int found;
unsigned int flags;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -8600,8 +8540,7 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -8656,10 +8595,9 @@ static int
cmdUpdateDevice(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- const char *from;
+ const char *from = NULL;
char *buffer;
int ret = TRUE;
- int found;
unsigned int flags;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -8668,8 +8606,7 @@ cmdUpdateDevice(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "file", &from) <= 0) {
virDomainFree(dom);
return FALSE;
}
@@ -8732,7 +8669,8 @@ static int
cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
- const char *mac, *target, *script, *type, *source, *model;
+ const char *mac = NULL, *target = NULL, *script = NULL,
+ *type = NULL, *source = NULL, *model = NULL;
int typ, ret = FALSE;
unsigned int flags;
virBuffer buf = VIR_BUFFER_INITIALIZER;
@@ -8744,14 +8682,14 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
goto cleanup;
- if (!(type = vshCommandOptString(cmd, "type", NULL)))
+ if (vshCommandOptString(cmd, "type", &type) <= 0)
goto cleanup;
- source = vshCommandOptString(cmd, "source", NULL);
- target = vshCommandOptString(cmd, "target", NULL);
- mac = vshCommandOptString(cmd, "mac", NULL);
- script = vshCommandOptString(cmd, "script", NULL);
- model = vshCommandOptString(cmd, "model", NULL);
+ vshCommandOptString(cmd, "source", &source);
+ vshCommandOptString(cmd, "target", &target);
+ vshCommandOptString(cmd, "mac", &mac);
+ vshCommandOptString(cmd, "script", &script);
+ vshCommandOptString(cmd, "model", &model);
/* check interface type */
if (STREQ(type, "network")) {
@@ -8842,7 +8780,7 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
xmlXPathContextPtr ctxt = NULL;
xmlNodePtr cur = NULL;
xmlBufferPtr xml_buf = NULL;
- const char *mac =NULL, *type;
+ const char *mac =NULL, *type = NULL;
char *doc;
char buf[64];
int i = 0, diff_mac, ret = FALSE;
@@ -8854,10 +8792,10 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
goto cleanup;
- if (!(type = vshCommandOptString(cmd, "type", NULL)))
+ if (vshCommandOptString(cmd, "type", &type) <= 0)
goto cleanup;
- mac = vshCommandOptString(cmd, "mac", NULL);
+ vshCommandOptString(cmd, "mac", &mac);
doc = virDomainGetXMLDesc(dom, 0);
if (!doc)
@@ -8982,10 +8920,11 @@ static int
cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
- const char *source, *target, *driver, *subdriver, *type, *mode;
+ const char *source = NULL, *target = NULL, *driver = NULL,
+ *subdriver = NULL, *type = NULL, *mode = NULL;
int isFile = 0, ret = FALSE;
unsigned int flags;
- const char *stype;
+ const char *stype = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER;
char *xml;
@@ -8995,17 +8934,17 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
goto cleanup;
- if (!(source = vshCommandOptString(cmd, "source", NULL)))
+ if (vshCommandOptString(cmd, "source", &source) <= 0)
goto cleanup;
- if (!(target = vshCommandOptString(cmd, "target", NULL)))
+ if (vshCommandOptString(cmd, "target", &target) <= 0)
goto cleanup;
- driver = vshCommandOptString(cmd, "driver", NULL);
- subdriver = vshCommandOptString(cmd, "subdriver", NULL);
- type = vshCommandOptString(cmd, "type", NULL);
- mode = vshCommandOptString(cmd, "mode", NULL);
- stype = vshCommandOptString(cmd, "sourcetype", NULL);
+ vshCommandOptString(cmd, "driver", &driver);
+ vshCommandOptString(cmd, "subdriver", &subdriver);
+ vshCommandOptString(cmd, "type", &type);
+ vshCommandOptString(cmd, "mode", &mode);
+ vshCommandOptString(cmd, "sourcetype", &stype);
if (!stype) {
if (driver && (STREQ(driver, "file") || STREQ(driver,
"tap")))
@@ -9110,7 +9049,7 @@ cmdDetachDisk(vshControl *ctl, const vshCmd *cmd)
xmlNodePtr cur = NULL;
xmlBufferPtr xml_buf = NULL;
virDomainPtr dom = NULL;
- const char *target;
+ const char *target = NULL;
char *doc;
int i = 0, diff_tgt, ret = FALSE;
unsigned int flags;
@@ -9121,7 +9060,7 @@ cmdDetachDisk(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
goto cleanup;
- if (!(target = vshCommandOptString(cmd, "target", NULL)))
+ if (vshCommandOptString(cmd, "target", &target) <= 0)
goto cleanup;
doc = virDomainGetXMLDesc(dom, 0);
@@ -9228,8 +9167,7 @@ static const vshCmdOptDef opts_cpu_compare[] = {
static int
cmdCPUCompare(vshControl *ctl, const vshCmd *cmd)
{
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
int result;
@@ -9237,8 +9175,7 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -9292,8 +9229,7 @@ static const vshCmdOptDef opts_cpu_baseline[] = {
static int
cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd)
{
- const char *from;
- int found;
+ const char *from = NULL;
int ret = TRUE;
char *buffer;
char *result = NULL;
@@ -9310,8 +9246,7 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- from = vshCommandOptString(cmd, "file", &found);
- if (!found)
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
return FALSE;
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
@@ -9523,9 +9458,8 @@ static const vshCmdOptDef opts_cd[] = {
static int
cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
{
- const char *dir;
+ const char *dir = NULL;
char *dir_malloced = NULL;
- int found;
int ret = TRUE;
if (!ctl->imode) {
@@ -9533,8 +9467,7 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
return FALSE;
}
- dir = vshCommandOptString(cmd, "dir", &found);
- if (!found) {
+ if (vshCommandOptString(cmd, "dir", &dir) <= 0) {
uid_t uid = geteuid();
dir = dir_malloced = virGetUserDirectory(uid);
}
@@ -9836,7 +9769,7 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = FALSE;
- const char *from;
+ const char *from = NULL;
char *buffer = NULL;
virDomainSnapshotPtr snapshot = NULL;
xmlDocPtr xml = NULL;
@@ -9851,8 +9784,7 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- from = vshCommandOptString(cmd, "xmlfile", NULL);
- if (from == NULL)
+ if (vshCommandOptString(cmd, "xmlfile", &from) <= 0)
buffer = vshStrdup(ctl, "<domainsnapshot/>");
else {
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
@@ -10109,7 +10041,7 @@ cmdSnapshotDumpXML(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = FALSE;
- const char *name;
+ const char *name = NULL;
virDomainSnapshotPtr snapshot = NULL;
char *xml = NULL;
@@ -10120,8 +10052,7 @@ cmdSnapshotDumpXML(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- name = vshCommandOptString(cmd, "snapshotname", NULL);
- if (name == NULL)
+ if (vshCommandOptString(cmd, "snapshotname", &name) <= 0)
goto cleanup;
snapshot = virDomainSnapshotLookupByName(dom, name, 0);
@@ -10166,7 +10097,7 @@ cmdDomainSnapshotRevert(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = FALSE;
- const char *name;
+ const char *name = NULL;
virDomainSnapshotPtr snapshot = NULL;
if (!vshConnectionUsability(ctl, ctl->conn))
@@ -10176,8 +10107,7 @@ cmdDomainSnapshotRevert(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- name = vshCommandOptString(cmd, "snapshotname", NULL);
- if (name == NULL)
+ if (vshCommandOptString(cmd, "snapshotname", &name) <= 0)
goto cleanup;
snapshot = virDomainSnapshotLookupByName(dom, name, 0);
@@ -10219,7 +10149,7 @@ cmdSnapshotDelete(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = FALSE;
- const char *name;
+ const char *name = NULL;
virDomainSnapshotPtr snapshot = NULL;
unsigned int flags = 0;
@@ -10230,8 +10160,7 @@ cmdSnapshotDelete(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- name = vshCommandOptString(cmd, "snapshotname", NULL);
- if (name == NULL)
+ if (vshCommandOptString(cmd, "snapshotname", &name) <= 0)
goto cleanup;
if (vshCommandOptBool(cmd, "children"))
@@ -10276,7 +10205,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = FALSE;
- const char *monitor_cmd;
+ const char *monitor_cmd = NULL;
char *result = NULL;
unsigned int flags = 0;
@@ -10287,8 +10216,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- monitor_cmd = vshCommandOptString(cmd, "cmd", NULL);
- if (monitor_cmd == NULL) {
+ if (vshCommandOptString(cmd, "cmd", &monitor_cmd) <= 0) {
vshError(ctl, "%s", _("missing monitor command"));
goto cleanup;
}
@@ -10804,83 +10732,104 @@ vshCommandOpt(const vshCmd *cmd, const char *name)
}
/*
- * Returns option as INT
+ * @cmd command reference
+ * @name option name
+ * @value result
+ *
+ * Convert option to int
+ * Return value:
+ * >0 if option found and valid (@value updated)
+ * 0 in case option not found (@value untouched)
+ * <0 in all other cases (@value untouched)
*/
static int
-vshCommandOptInt(const vshCmd *cmd, const char *name, int *found)
+vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
{
vshCmdOpt *arg = vshCommandOpt(cmd, name);
- int res = 0, num_found = FALSE;
+ int ret = 0, num;
char *end_p = NULL;
if ((arg != NULL) && (arg->data != NULL)) {
- res = strtol(arg->data, &end_p, 10);
- if ((arg->data == end_p) || (*end_p!= 0))
- num_found = FALSE;
- else
- num_found = TRUE;
+ num = strtol(arg->data, &end_p, 10);
+ ret = -1;
+ if ((arg->data != end_p) && (*end_p == 0) && value) {
+ *value = num;
+ ret = 1;
+ }
}
- if (found)
- *found = num_found;
- return res;
+ return ret;
}
-static unsigned long
-vshCommandOptUL(const vshCmd *cmd, const char *name, int *found)
+/*
+ * Convert option to unsigned long
+ * See vshCommandOptInt()
+ */
+static int
+vshCommandOptUL(const vshCmd *cmd, const char *name, unsigned long *value)
{
vshCmdOpt *arg = vshCommandOpt(cmd, name);
- unsigned long res = 0;
- int num_found = FALSE;
+ int ret = 0;
+ unsigned long num;
char *end_p = NULL;
if ((arg != NULL) && (arg->data != NULL)) {
- res = strtoul(arg->data, &end_p, 10);
- if ((arg->data == end_p) || (*end_p!= 0))
- num_found = FALSE;
- else
- num_found = TRUE;
+ num = strtoul(arg->data, &end_p, 10);
+ ret = -1;
+ if ((arg->data != end_p) && (*end_p == 0) && value) {
+ *value = num;
+ ret = 1;
+ }
}
- if (found)
- *found = num_found;
- return res;
+ return ret;
}
/*
* Returns option as STRING
+ * See vshCommandOptInt()
*/
-static const char *
-vshCommandOptString(const vshCmd *cmd, const char *name, int *found)
+static int
+vshCommandOptString(const vshCmd *cmd, const char *name, const char **value)
{
vshCmdOpt *arg = vshCommandOpt(cmd, name);
+ int ret = 0;
+
+ if (arg && arg->data) {
+ ret = -1;
+ if (*arg->data) {
+ if (value) {
+ *value = arg->data;
+ ret = 1;
+ }
+ } else if (arg->def && ((arg->def->flag) & VSH_OFLAG_REQ))
{
+ vshError(NULL, _("Missing required option '%s'"),
name);
+ }
+ }
- if (found)
- *found = arg ? TRUE : FALSE;
-
- if (arg && arg->data && *arg->data)
- return arg->data;
-
- if (arg && arg->def && ((arg->def->flag) &
VSH_OFLAG_REQ))
- vshError(NULL, _("Missing required option '%s'"), name);
-
- return NULL;
+ return ret;
}
/*
* Returns option as long long
+ * See vshCommandOptInt()
*/
-static long long
-vshCommandOptLongLong(const vshCmd *cmd, const char *name, int *found)
+static int
+vshCommandOptLongLong(const vshCmd *cmd, const char *name,
+ unsigned long long *value)
{
vshCmdOpt *arg = vshCommandOpt(cmd, name);
- int num_found = FALSE;
- long long res = 0;
+ int ret = 0;
+ long long num;
char *end_p = NULL;
- if ((arg != NULL) && (arg->data != NULL))
- num_found = !virStrToLong_ll(arg->data, &end_p, 10, &res);
- if (found)
- *found = num_found;
- return res;
+ if ((arg != NULL) && (arg->data != NULL)) {
+ num = strtoll(arg->data, &end_p, 10);
+ ret = -1;
+ if ((arg->data != end_p) && (*end_p == 0) && value) {
+ *value = num;
+ ret = 1;
+ }
+ }
+ return ret;
}
/*
@@ -10941,13 +10890,13 @@ vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
const char **name, int flag)
{
virDomainPtr dom = NULL;
- const char *n;
+ const char *n = NULL;
int id;
const char *optname = "domain";
if (!cmd_has_option (ctl, cmd, optname))
return NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n",
@@ -10988,12 +10937,12 @@ vshCommandOptNetworkBy(vshControl *ctl, const vshCmd *cmd,
const char **name, int flag)
{
virNetworkPtr network = NULL;
- const char *n;
+ const char *n = NULL;
const char *optname = "network";
if (!cmd_has_option (ctl, cmd, optname))
return NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n",
@@ -11027,12 +10976,12 @@ vshCommandOptNWFilterBy(vshControl *ctl, const vshCmd *cmd,
const char **name, int flag)
{
virNWFilterPtr nwfilter = NULL;
- const char *n;
+ const char *n = NULL;
const char *optname = "nwfilter";
if (!cmd_has_option (ctl, cmd, optname))
return NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n",
@@ -11065,12 +11014,12 @@ vshCommandOptInterfaceBy(vshControl *ctl, const vshCmd *cmd,
const char **name, int flag)
{
virInterfacePtr iface = NULL;
- const char *n;
+ const char *n = NULL;
const char *optname = "interface";
if (!cmd_has_option (ctl, cmd, optname))
return NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n",
@@ -11103,9 +11052,9 @@ vshCommandOptPoolBy(vshControl *ctl, const vshCmd *cmd, const char
*optname,
const char **name, int flag)
{
virStoragePoolPtr pool = NULL;
- const char *n;
+ const char *n = NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n",
@@ -11141,13 +11090,12 @@ vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
{
virStorageVolPtr vol = NULL;
virStoragePoolPtr pool = NULL;
- const char *n, *p;
- int found;
+ const char *n = NULL, *p = NULL;
- if (!(n = vshCommandOptString(cmd, optname, NULL)))
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
- if (!(p = vshCommandOptString(cmd, pooloptname, &found)) && found)
+ if (vshCommandOptString(cmd, pooloptname, &p) < 0)
return NULL;
if (p)
@@ -11191,14 +11139,13 @@ static virSecretPtr
vshCommandOptSecret(vshControl *ctl, const vshCmd *cmd, const char **name)
{
virSecretPtr secret = NULL;
- const char *n;
+ const char *n = NULL;
const char *optname = "secret";
if (!cmd_has_option (ctl, cmd, optname))
return NULL;
- n = vshCommandOptString(cmd, optname, NULL);
- if (n == NULL)
+ if (vshCommandOptString(cmd, optname, &n) <= 0)
return NULL;
vshDebug(ctl, 5, "%s: found option <%s>: %s\n", cmd->def->name,
optname, n);
--
1.7.4