From: Daniel P. Berrange Date: Mon, 21 Jan 2008 15:27:14 +0000 (+0000) Subject: Use virFileReadAll in virsh.c X-Git-Tag: LIBVIRT_0_4_1~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45738083a6cda05204208964aebb03465fb7ac76;p=thirdparty%2Flibvirt.git Use virFileReadAll in virsh.c --- diff --git a/ChangeLog b/ChangeLog index 05de188ffc..e7a4d16d56 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Jan 21 10:25:04 EST 2008 Daniel P. Berrange + + * 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 * src/openvz_driver.c: Remove no-op networking APIs diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version index ba8e227262..edc7f87640 100644 --- a/src/libvirt_sym.version +++ b/src/libvirt_sym.version @@ -131,5 +131,7 @@ __virDomainMigratePerform; __virDomainMigrateFinish; + __virFileReadAll; + local: *; }; diff --git a/src/util.c b/src/util.c index d23237ef2c..f16aaf49f4 100644 --- a/src/util.c +++ b/src/util.c @@ -316,9 +316,9 @@ ssize_t safewrite(int fd, const void *buf, size_t count) } -int virFileReadAll(const char *path, - int maxlen, - char **buf) +int __virFileReadAll(const char *path, + int maxlen, + char **buf) { FILE *fh; struct stat st; diff --git a/src/util.h b/src/util.h index b54df0ae91..d64299f3e8 100644 --- a/src/util.h +++ b/src/util.h @@ -33,9 +33,10 @@ int virRun(virConnectPtr conn, char **argv, int *status); int saferead(int fd, void *buf, size_t count); ssize_t safewrite(int fd, const void *buf, size_t count); -int virFileReadAll(const char *path, - int maxlen, - char **buf); +int __virFileReadAll(const char *path, + int maxlen, + char **buf); +#define virFileReadAll(p,m,b) __virFileReadAll((p),(m),(b)) int virFileMatchesNameSuffix(const char *file, const char *name, diff --git a/src/virsh.c b/src/virsh.c index f95a1a38ff..78c7c85a68 100644 --- a/src/virsh.c +++ b/src/virsh.c @@ -48,6 +48,7 @@ #include "internal.h" #include "console.h" +#include "util.h" static char *progname; @@ -56,6 +57,8 @@ static char *progname; #define FALSE 0 #endif +#define VIRSH_MAX_XML_FILE 10*1024*1024 + #define VSH_PROMPT_RW "virsh # " #define VSH_PROMPT_RO "virsh > " @@ -858,66 +861,6 @@ static vshCmdOptDef opts_create[] = { {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 cmdCreate(vshControl * ctl, vshCmd * cmd) { @@ -934,8 +877,8 @@ cmdCreate(vshControl * ctl, vshCmd * cmd) if (!found) return FALSE; - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; dom = virDomainCreateLinux(ctl->conn, buffer, 0); free (buffer); @@ -982,8 +925,8 @@ cmdDefine(vshControl * ctl, vshCmd * cmd) if (!found) return FALSE; - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; dom = virDomainDefineXML(ctl->conn, buffer); free (buffer); @@ -2372,8 +2315,8 @@ cmdNetworkCreate(vshControl * ctl, vshCmd * cmd) if (!found) return FALSE; - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; network = virNetworkCreateXML(ctl->conn, buffer); free (buffer); @@ -2420,8 +2363,8 @@ cmdNetworkDefine(vshControl * ctl, vshCmd * cmd) if (!found) return FALSE; - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; network = virNetworkDefineXML(ctl->conn, buffer); free (buffer); @@ -3107,8 +3050,8 @@ cmdAttachDevice(vshControl * ctl, vshCmd * cmd) return FALSE; } - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; ret = virDomainAttachDevice(dom, buffer); free (buffer); @@ -3161,8 +3104,8 @@ cmdDetachDevice(vshControl * ctl, vshCmd * cmd) return FALSE; } - buffer = readFile (ctl, from); - if (buffer == NULL) return FALSE; + if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) + return FALSE; ret = virDomainDetachDevice(dom, buffer); free (buffer);