Use virFileReadAll in virsh.c

This commit is contained in:
Daniel P. Berrange 2008-01-21 15:27:14 +00:00
parent 53365f4c54
commit 45738083a6
5 changed files with 31 additions and 78 deletions

View File

@ -1,3 +1,10 @@
Mon Jan 21 10:25:04 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/util.c, src/util.h: Rename virFileReadAll to __virFileReadAll,
and add macro for compat
* src/libvirt_sym.version: Export __virFileReadAll
* src/virsh.c: Use virFileReadAll for loading XML files
Mon Jan 21 10:12:04 EST 2008 Daniel P. Berrange <berrange@redhat.com> Mon Jan 21 10:12:04 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/openvz_driver.c: Remove no-op networking APIs * src/openvz_driver.c: Remove no-op networking APIs

View File

@ -131,5 +131,7 @@
__virDomainMigratePerform; __virDomainMigratePerform;
__virDomainMigrateFinish; __virDomainMigrateFinish;
__virFileReadAll;
local: *; local: *;
}; };

View File

@ -316,7 +316,7 @@ ssize_t safewrite(int fd, const void *buf, size_t count)
} }
int virFileReadAll(const char *path, int __virFileReadAll(const char *path,
int maxlen, int maxlen,
char **buf) char **buf)
{ {

View File

@ -33,9 +33,10 @@ int virRun(virConnectPtr conn, char **argv, int *status);
int saferead(int fd, void *buf, size_t count); int saferead(int fd, void *buf, size_t count);
ssize_t safewrite(int fd, const void *buf, size_t count); ssize_t safewrite(int fd, const void *buf, size_t count);
int virFileReadAll(const char *path, int __virFileReadAll(const char *path,
int maxlen, int maxlen,
char **buf); char **buf);
#define virFileReadAll(p,m,b) __virFileReadAll((p),(m),(b))
int virFileMatchesNameSuffix(const char *file, int virFileMatchesNameSuffix(const char *file,
const char *name, const char *name,

View File

@ -48,6 +48,7 @@
#include "internal.h" #include "internal.h"
#include "console.h" #include "console.h"
#include "util.h"
static char *progname; static char *progname;
@ -56,6 +57,8 @@ static char *progname;
#define FALSE 0 #define FALSE 0
#endif #endif
#define VIRSH_MAX_XML_FILE 10*1024*1024
#define VSH_PROMPT_RW "virsh # " #define VSH_PROMPT_RW "virsh # "
#define VSH_PROMPT_RO "virsh > " #define VSH_PROMPT_RO "virsh > "
@ -858,66 +861,6 @@ static vshCmdOptDef opts_create[] = {
{NULL, 0, 0, NULL} {NULL, 0, 0, NULL}
}; };
/* Read in a whole file and return it as a string.
* If it fails, it logs an error and returns NULL.
* String must be freed by caller.
*/
static char *
readFile (vshControl *ctl, const char *filename)
{
char *retval;
int len = 0, fd;
if ((fd = open(filename, O_RDONLY)) == -1) {
vshError (ctl, FALSE, _("Failed to open '%s': %s"),
filename, strerror (errno));
return NULL;
}
if (!(retval = malloc(len + 1)))
goto out_of_memory;
while (1) {
char buffer[1024];
char *new;
int ret;
if ((ret = read(fd, buffer, sizeof(buffer))) == 0)
break;
if (ret == -1) {
if (errno == EINTR)
continue;
vshError (ctl, FALSE, _("Failed to open '%s': read: %s"),
filename, strerror (errno));
goto error;
}
if (!(new = realloc(retval, len + ret + 1)))
goto out_of_memory;
retval = new;
memcpy(retval + len, buffer, ret);
len += ret;
}
retval[len] = '\0';
return retval;
out_of_memory:
vshError (ctl, FALSE, _("Error allocating memory: %s"),
strerror(errno));
error:
if (retval)
free(retval);
close(fd);
return NULL;
}
static int static int
cmdCreate(vshControl * ctl, vshCmd * cmd) cmdCreate(vshControl * ctl, vshCmd * cmd)
{ {
@ -934,8 +877,8 @@ cmdCreate(vshControl * ctl, vshCmd * cmd)
if (!found) if (!found)
return FALSE; return FALSE;
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
dom = virDomainCreateLinux(ctl->conn, buffer, 0); dom = virDomainCreateLinux(ctl->conn, buffer, 0);
free (buffer); free (buffer);
@ -982,8 +925,8 @@ cmdDefine(vshControl * ctl, vshCmd * cmd)
if (!found) if (!found)
return FALSE; return FALSE;
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
dom = virDomainDefineXML(ctl->conn, buffer); dom = virDomainDefineXML(ctl->conn, buffer);
free (buffer); free (buffer);
@ -2372,8 +2315,8 @@ cmdNetworkCreate(vshControl * ctl, vshCmd * cmd)
if (!found) if (!found)
return FALSE; return FALSE;
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
network = virNetworkCreateXML(ctl->conn, buffer); network = virNetworkCreateXML(ctl->conn, buffer);
free (buffer); free (buffer);
@ -2420,8 +2363,8 @@ cmdNetworkDefine(vshControl * ctl, vshCmd * cmd)
if (!found) if (!found)
return FALSE; return FALSE;
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
network = virNetworkDefineXML(ctl->conn, buffer); network = virNetworkDefineXML(ctl->conn, buffer);
free (buffer); free (buffer);
@ -3107,8 +3050,8 @@ cmdAttachDevice(vshControl * ctl, vshCmd * cmd)
return FALSE; return FALSE;
} }
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
ret = virDomainAttachDevice(dom, buffer); ret = virDomainAttachDevice(dom, buffer);
free (buffer); free (buffer);
@ -3161,8 +3104,8 @@ cmdDetachDevice(vshControl * ctl, vshCmd * cmd)
return FALSE; return FALSE;
} }
buffer = readFile (ctl, from); if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
if (buffer == NULL) return FALSE; return FALSE;
ret = virDomainDetachDevice(dom, buffer); ret = virDomainDetachDevice(dom, buffer);
free (buffer); free (buffer);