On 2013年01月22日 02:07, Peter Krempa wrote:
---
tools/virsh-volume.c | 69 +++++++++++++++++++++-------------------------------
1 file changed, 28 insertions(+), 41 deletions(-)
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index 466188c..0575166 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -52,13 +52,12 @@ vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
const char *n = NULL, *p = NULL;
virCheckFlags(VSH_BYUUID | VSH_BYNAME, NULL);
- if (vshCommandOptString(cmd, optname,&n)<= 0)
+ if (vshCommandOptStringReq(ctl, cmd, optname,&n)< 0)
return NULL;
- if (pooloptname != NULL&& vshCommandOptString(cmd, pooloptname,&p)<
0) {
- vshError(ctl, "%s", _("missing option"));
+ if (pooloptname != NULL&&
+ vshCommandOptStringReq(ctl, cmd, pooloptname,&p)< 0)
return NULL;
- }
if (p)
pool = vshCommandOptPoolBy(ctl, cmd, pooloptname, name, flags);
@@ -182,10 +181,10 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
VSH_BYNAME)))
return false;
- if (vshCommandOptString(cmd, "name",&name)<= 0)
+ if (vshCommandOptStringReq(ctl, cmd, "name",&name)< 0)
goto cleanup;
- if (vshCommandOptString(cmd, "capacity",&capacityStr)<= 0)
+ if (vshCommandOptStringReq(ctl, cmd, "capacity",&capacityStr)< 0)
goto cleanup;
if (vshVolSize(capacityStr,&capacity)< 0) {
@@ -199,14 +198,11 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
}
- if (vshCommandOptString(cmd, "format",&format)< 0 ||
- vshCommandOptString(cmd, "backing-vol",&snapshotStrVol)< 0 ||
- vshCommandOptString(cmd, "backing-vol-format",
-&snapshotStrFormat)< 0) {
- vshError(ctl, "%s", _("missing argument"));
+ if (vshCommandOptStringReq(ctl, cmd, "format",&format)< 0 ||
+ vshCommandOptStringReq(ctl, cmd,
"backing-vol",&snapshotStrVol)< 0 ||
+ vshCommandOptStringReq(ctl, cmd, "backing-vol-format",
+&snapshotStrFormat)< 0)
goto cleanup;
- }
-
virBufferAddLit(&buf, "<volume>\n");
virBufferAsprintf(&buf, "<name>%s</name>\n", name);
@@ -340,9 +336,9 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
virStoragePoolPtr pool;
virStorageVolPtr vol;
const char *from = NULL;
- bool ret = true;
+ bool ret = false;
unsigned int flags = 0;
- char *buffer;
+ char *buffer = NULL;
if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
@@ -350,29 +346,26 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
VSH_BYNAME)))
return false;
- if (vshCommandOptString(cmd, "file",&from)<= 0) {
- virStoragePoolFree(pool);
- return false;
- }
+ if (vshCommandOptStringReq(ctl, cmd, "file",&from)< 0)
+ goto cleanup;
if (virFileReadAll(from, VSH_MAX_XML_FILE,&buffer)< 0) {
- vshReportError(ctl);
- virStoragePoolFree(pool);
- return false;
+ vshSaveLibvirtError();
+ goto cleanup;
}
- vol = virStorageVolCreateXML(pool, buffer, flags);
- VIR_FREE(buffer);
- virStoragePoolFree(pool);
-
- if (vol != NULL) {
+ if ((vol = virStorageVolCreateXML(pool, buffer, flags))) {
vshPrint(ctl, _("Vol %s created from %s\n"),
virStorageVolGetName(vol), from);
virStorageVolFree(vol);
+ ret = true;
} else {
vshError(ctl, _("Failed to create vol from %s"), from);
- ret = false;
}
+
+cleanup:
+ VIR_FREE(buffer);
+ virStoragePoolFree(pool);
return ret;
}
@@ -429,9 +422,9 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
- if (vshCommandOptString(cmd, "file",&from)<= 0) {
+
+ if (vshCommandOptStringReq(ctl, cmd, "file",&from)< 0)
goto cleanup;
- }
if (!(inputvol = vshCommandOptVol(ctl, cmd, "vol", "inputpool",
NULL)))
goto cleanup;
@@ -548,7 +541,7 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
}
- if (vshCommandOptString(cmd, "newname",&name)<= 0)
+ if (vshCommandOptStringReq(ctl, cmd, "newname",&name)< 0)
goto cleanup;
origxml = virStorageVolGetXMLDesc(origvol, 0);
@@ -658,10 +651,8 @@ cmdVolUpload(vshControl *ctl, const vshCmd *cmd)
return false;
}
- if (vshCommandOptString(cmd, "file",&file)< 0) {
- vshError(ctl, _("file must not be empty"));
+ if (vshCommandOptStringReq(ctl, cmd, "file",&file)< 0)
goto cleanup;
- }
if ((fd = open(file, O_RDONLY))< 0) {
vshError(ctl, _("cannot read %s"), file);
@@ -764,10 +755,8 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
if (!(vol = vshCommandOptVol(ctl, cmd, "vol",
"pool",&name)))
return false;
- if (vshCommandOptString(cmd, "file",&file)< 0) {
- vshError(ctl, _("file must not be empty"));
+ if (vshCommandOptStringReq(ctl, cmd, "file",&file)< 0)
goto cleanup;
- }
if ((fd = open(file, O_WRONLY|O_CREAT|O_EXCL, 0666))< 0) {
if (errno != EEXIST ||
@@ -906,10 +895,8 @@ cmdVolWipe(vshControl *ctl, const vshCmd *cmd)
return false;
}
- if (vshCommandOptString(cmd, "algorithm",&algorithm_str)< 0) {
- vshError(ctl, "%s", _("missing argument"));
+ if (vshCommandOptStringReq(ctl, cmd, "algorithm",&algorithm_str)<
0)
goto out;
- }
if (algorithm_str&&
(algorithm = virStorageVolWipeAlgorithmTypeFromString(algorithm_str))< 0)
{
@@ -1072,7 +1059,7 @@ cmdVolResize(vshControl *ctl, const vshCmd *cmd)
if (!(vol = vshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
return false;
- if (vshCommandOptString(cmd, "capacity",&capacityStr)<= 0)
+ if (vshCommandOptStringReq(ctl, cmd, "capacity",&capacityStr)<= 0)
goto cleanup;
virSkipSpaces(&capacityStr);
if (*capacityStr == '-') {
ACK