This helper calls virFileReadAll(), and then outputs a
proper error if it fails for whatever reason.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
---
tools/virsh.c | 65 ++++++++++++++++++++++++++++++++------------------------
1 files changed, 37 insertions(+), 28 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 3c48eee..02ab7d3 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -294,6 +294,9 @@ static void vshDebug(vshControl *ctl, int level, const char *format,
...)
/* XXX: add batch support */
#define vshPrint(_ctl, ...) fprintf(stdout, __VA_ARGS__)
+static int vshFileReadAll(vshControl *ctl, const char *filename, int size,
+ char **buffer);
+
static const char *vshDomainStateToString(int state);
static const char *vshDomainVcpuStateToString(int state);
static int vshConnectionUsability(vshControl *ctl, virConnectPtr conn);
@@ -1154,7 +1157,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
if (vshCommandOptBool(cmd, "paused"))
@@ -1208,7 +1211,7 @@ cmdDefine(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
dom = virDomainDefineXML(ctl->conn, buffer);
@@ -2770,7 +2773,7 @@ cmdDomXMLFromNative(vshControl *ctl, const vshCmd *cmd)
format = vshCommandOptString(cmd, "format", NULL);
configFile = vshCommandOptString(cmd, "config", NULL);
- if (virFileReadAll(configFile, 1024*1024, &configData) < 0)
+ if (vshFileReadAll(ctl, configFile, 1024*1024, &configData) < 0)
return FALSE;
xmlData = virConnectDomainXMLFromNative(ctl->conn, format, configData, flags);
@@ -2816,7 +2819,7 @@ cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
format = vshCommandOptString(cmd, "format", NULL);
xmlFile = vshCommandOptString(cmd, "xml", NULL);
- if (virFileReadAll(xmlFile, 1024*1024, &xmlData) < 0)
+ if (vshFileReadAll(ctl, xmlFile, 1024*1024, &xmlData) < 0)
return FALSE;
configData = virConnectDomainXMLToNative(ctl->conn, format, xmlData, flags);
@@ -3165,7 +3168,7 @@ cmdNetworkCreate(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
network = virNetworkCreateXML(ctl->conn, buffer);
@@ -3213,7 +3216,7 @@ cmdNetworkDefine(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
network = virNetworkDefineXML(ctl->conn, buffer);
@@ -3936,7 +3939,7 @@ cmdInterfaceDefine(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
iface = virInterfaceDefineXML(ctl->conn, buffer, 0);
@@ -4098,7 +4101,7 @@ cmdNWFilterDefine(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
nwfilter = virNWFilterDefineXML(ctl->conn, buffer);
@@ -4446,7 +4449,7 @@ cmdPoolCreate(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
pool = virStoragePoolCreateXML(ctl->conn, buffer, 0);
@@ -4499,7 +4502,7 @@ cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
return FALSE;
}
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
dev = virNodeDeviceCreateXML(ctl->conn, buffer, 0);
@@ -4711,7 +4714,7 @@ cmdPoolDefine(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
pool = virStoragePoolDefineXML(ctl->conn, buffer, 0);
@@ -5490,7 +5493,7 @@ cmdPoolDiscoverSources(vshControl * ctl, const vshCmd * cmd
ATTRIBUTE_UNUSED)
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
- if (srcSpecFile && virFileReadAll(srcSpecFile, VIRSH_MAX_XML_FILE,
&srcSpec) < 0)
+ if (srcSpecFile && vshFileReadAll(ctl, srcSpecFile, VIRSH_MAX_XML_FILE,
&srcSpec) < 0)
return FALSE;
srcList = virConnectFindStoragePoolSources(ctl->conn, type, srcSpec, 0);
@@ -5967,7 +5970,7 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
return FALSE;
}
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
virStoragePoolFree(pool);
return FALSE;
}
@@ -6028,9 +6031,8 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
if (!(inputvol = vshCommandOptVol(ctl, cmd, "vol", "inputpool",
NULL)))
goto cleanup;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
goto cleanup;
- }
newvol = virStorageVolCreateXMLFrom(pool, buffer, inputvol, 0);
@@ -6603,7 +6605,7 @@ cmdSecretDefine(vshControl *ctl, const vshCmd *cmd)
if (!from)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
res = virSecretDefineXML(ctl->conn, buffer, 0);
@@ -7545,7 +7547,7 @@ cmdAttachDevice(vshControl *ctl, const vshCmd *cmd)
return FALSE;
}
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
virDomainFree(dom);
return FALSE;
}
@@ -7612,7 +7614,7 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd)
return FALSE;
}
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
virDomainFree(dom);
return FALSE;
}
@@ -7679,7 +7681,7 @@ cmdUpdateDevice(vshControl *ctl, const vshCmd *cmd)
return FALSE;
}
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
virDomainFree(dom);
return FALSE;
}
@@ -8269,7 +8271,7 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
result = virConnectCompareCPU(ctl->conn, buffer, 0);
@@ -8342,7 +8344,7 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd)
if (!found)
return FALSE;
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
return FALSE;
doc = xmlNewDoc(NULL);
@@ -8521,12 +8523,8 @@ editReadBackFile (vshControl *ctl, const char *filename)
{
char *ret;
- if (virFileReadAll (filename, VIRSH_MAX_XML_FILE, &ret) == -1) {
- vshError(ctl,
- _("%s: failed to read temporary file: %s"),
- filename, strerror(errno));
+ if (vshFileReadAll (ctl, filename, VIRSH_MAX_XML_FILE, &ret) == -1)
return NULL;
- }
return ret;
}
@@ -8809,9 +8807,8 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
if (from == NULL)
buffer = strdup("<domainsnapshot/>");
else {
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ if (vshFileReadAll(ctl, from, VIRSH_MAX_XML_FILE, &buffer) < 0)
goto cleanup;
- }
}
if (buffer == NULL) {
vshError(ctl, "%s", _("Out of memory"));
@@ -10430,6 +10427,18 @@ _vshStrdup(vshControl *ctl, const char *s, const char *filename,
int line)
exit(EXIT_FAILURE);
}
+static int
+vshFileReadAll(vshControl *ctl, const char *filename, int size, char **buffer)
+{
+ int ret;
+
+ ret = virFileReadAll(filename, size, buffer);
+ if (ret < 0)
+ vshError(ctl, _("Failed to read contents of '%s'"), filename);
+
+ return ret;
+}
+
/*
* Initialize connection.
*/
--
1.7.1.1