]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Add API for loading daemon config from in-memory blob
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 4 Apr 2012 12:14:19 +0000 (13:14 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 10 Apr 2012 10:11:12 +0000 (11:11 +0100)
Rename existing daemonConfigLoad API to daemonConfigLoadFile and
add an alternative daemonConfigLoadData

* daemon/libvirtd-config.c, daemon/libvirtd-config.h: Add
  daemonConfigLoadData and rename daemonConfigLoad to
  daemonConfigLoadFile
* daemon/libvirtd.c: Update for renamed API

daemon/libvirtd-config.c
daemon/libvirtd-config.h
daemon/libvirtd.c

index bfb70842f85d557366a0da31f9f5abda19425c69..7776202eb6de8880d54620c4094ae55a793ddd42 100644 (file)
@@ -350,26 +350,11 @@ daemonConfigFree(struct daemonConfig *data)
     VIR_FREE(data);
 }
 
-
-/* Read the config file if it exists.
- * Only used in the remote case, hence the name.
- */
-int
-daemonConfigLoad(struct daemonConfig *data,
-                 const char *filename,
-                 bool allow_missing)
+static int
+daemonConfigLoadOptions(struct daemonConfig *data,
+                        const char *filename,
+                        virConfPtr conf)
 {
-    virConfPtr conf;
-
-    if (allow_missing &&
-        access(filename, R_OK) == -1 &&
-        errno == ENOENT)
-        return 0;
-
-    conf = virConfReadFile (filename, 0);
-    if (!conf)
-        return -1;
-
     GET_CONF_INT (conf, filename, listen_tcp);
     GET_CONF_INT (conf, filename, listen_tls);
     GET_CONF_STR (conf, filename, tls_port);
@@ -447,10 +432,50 @@ daemonConfigLoad(struct daemonConfig *data,
     GET_CONF_INT (conf, filename, keepalive_count);
     GET_CONF_INT (conf, filename, keepalive_required);
 
-    virConfFree (conf);
     return 0;
 
 error:
-    virConfFree (conf);
     return -1;
 }
+
+
+/* Read the config file if it exists.
+ * Only used in the remote case, hence the name.
+ */
+int
+daemonConfigLoadFile(struct daemonConfig *data,
+                     const char *filename,
+                     bool allow_missing)
+{
+    virConfPtr conf;
+    int ret;
+
+    if (allow_missing &&
+        access(filename, R_OK) == -1 &&
+        errno == ENOENT)
+        return 0;
+
+    conf = virConfReadFile(filename, 0);
+    if (!conf)
+        return -1;
+
+    ret = daemonConfigLoadOptions(data, filename, conf);
+    virConfFree(conf);
+    return ret;
+}
+
+int daemonConfigLoadData(struct daemonConfig *data,
+                         const char *filename,
+                         const char *filedata)
+{
+    virConfPtr conf;
+    int ret;
+
+    conf = virConfReadMem(filedata, strlen(filedata), 0);
+    if (!conf)
+        return -1;
+
+    ret = daemonConfigLoadOptions(data, filename, conf);
+    virConfFree(conf);
+    return ret;
+}
index 00e8d1cc94ba3f687e540f3cef7deae71eb0e254..082cb9cdf795b0b2d68e1ca46fe01b7566094b5b 100644 (file)
@@ -84,8 +84,11 @@ struct daemonConfig {
 int daemonConfigFilePath(bool privileged, char **configfile);
 struct daemonConfig* daemonConfigNew(bool privileged);
 void daemonConfigFree(struct daemonConfig *data);
-int daemonConfigLoad(struct daemonConfig *data,
-                     const char *filename,
-                     bool allow_missing);
+int daemonConfigLoadFile(struct daemonConfig *data,
+                         const char *filename,
+                         bool allow_missing);
+int daemonConfigLoadData(struct daemonConfig *data,
+                         const char *filename,
+                         const char *filedata);
 
 #endif /* __LIBVIRTD_CONFIG_H__ */
index f1487772bdd66bf85a0955230a212e4e71d55605..460a552b9db17f4d633f95676b16305147d872b0 100644 (file)
@@ -922,7 +922,7 @@ int main(int argc, char **argv) {
 
     /* Read the config file if it exists*/
     if (remote_config_file &&
-        daemonConfigLoad(config, remote_config_file, implicit_conf) < 0) {
+        daemonConfigLoadFile(config, remote_config_file, implicit_conf) < 0) {
         VIR_ERROR(_("Can't load config file '%s'"), remote_config_file);
         exit(EXIT_FAILURE);
     }