diff --git a/ChangeLog b/ChangeLog index 05de188ffc413ea00b0f315e0a634fc71a71f39b..e7a4d16d56e87956961cc387bc640b641445c40c 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 ba8e227262be174c053f6ca36f175c3f48a6d460..edc7f87640806a8cf09affd1bf3c2360f90ebf95 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 d23237ef2c666d428e44a35795bf4df714e89f3c..f16aaf49f496abd7f358812c8a7c5faa1892897c 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 b54df0ae91c161deb10b2f4fee9470974be5ac3c..d64299f3e8d8bd1efac8dabe89f7d9d0ee2d1033 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 f95a1a38ff39414240198ef38b098bf954a06c2b..78c7c85a68babaa31f32b1a926ea406845b4e9ee 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);