]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Use virFileReadAll in virsh.c
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 21 Jan 2008 15:27:14 +0000 (15:27 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 21 Jan 2008 15:27:14 +0000 (15:27 +0000)
ChangeLog
src/libvirt_sym.version
src/util.c
src/util.h
src/virsh.c

index 05de188ffc413ea00b0f315e0a634fc71a71f39b..e7a4d16d56e87956961cc387bc640b641445c40c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * src/openvz_driver.c: Remove no-op networking APIs
index ba8e227262be174c053f6ca36f175c3f48a6d460..edc7f87640806a8cf09affd1bf3c2360f90ebf95 100644 (file)
        __virDomainMigratePerform;
        __virDomainMigrateFinish;
 
+        __virFileReadAll;
+
     local: *;
 };
index d23237ef2c666d428e44a35795bf4df714e89f3c..f16aaf49f496abd7f358812c8a7c5faa1892897c 100644 (file)
@@ -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;
index b54df0ae91c161deb10b2f4fee9470974be5ac3c..d64299f3e8d8bd1efac8dabe89f7d9d0ee2d1033 100644 (file)
@@ -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,
index f95a1a38ff39414240198ef38b098bf954a06c2b..78c7c85a68babaa31f32b1a926ea406845b4e9ee 100644 (file)
@@ -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);