[pulseaudio-discuss] [PATCH 5/6] device-restore: Add perportentry_{read, write}_raw_name().

Tanu Kaskinen tanu.kaskinen at jollamobile.com
Thu Oct 25 10:37:25 PDT 2012


The upcoming "factory settings" feature will need to read and write entries
using the raw database key, because the key comes from a configuration file
that does not have the "basekeyname" and the port name separated.
---
 src/modules/module-device-restore.c |   60 +++++++++++++++++++++++------------
 1 file changed, 39 insertions(+), 21 deletions(-)

diff --git a/src/modules/module-device-restore.c b/src/modules/module-device-restore.c
index 05b7301..e334ff6 100644
--- a/src/modules/module-device-restore.c
+++ b/src/modules/module-device-restore.c
@@ -355,21 +355,18 @@ static void perportentry_free(struct perportentry* e) {
     pa_xfree(e);
 }
 
-static pa_bool_t perportentry_write(struct userdata *u, const char *basekeyname, const char *port, const struct perportentry *e) {
+static bool perportentry_write_raw_name(struct userdata *u, const char *name, const struct perportentry *e) {
     pa_tagstruct *t;
     pa_datum key, data;
-    pa_bool_t r;
+    bool r;
     uint32_t i;
     pa_format_info *f;
     uint8_t n_formats;
-    char *name;
 
     pa_assert(u);
-    pa_assert(basekeyname);
+    pa_assert(name);
     pa_assert(e);
 
-    name = pa_sprintf_malloc("%s:%s", basekeyname, (port ? port : "null"));
-
     n_formats = pa_idxset_size(e->formats);
 
     t = pa_tagstruct_new(NULL, 0);
@@ -390,27 +387,38 @@ static pa_bool_t perportentry_write(struct userdata *u, const char *basekeyname,
 
     data.data = (void*)pa_tagstruct_data(t, &data.size);
 
-    r = (pa_database_set(u->database, &key, &data, TRUE) == 0);
+    r = (pa_database_set(u->database, &key, &data, true) == 0);
 
     pa_tagstruct_free(t);
+
+    return r;
+}
+
+static bool perportentry_write(struct userdata *u, const char *basekeyname, const char *port, const struct perportentry *e) {
+    bool r;
+    char *name;
+
+    pa_assert(u);
+    pa_assert(basekeyname);
+    pa_assert(e);
+
+    name = pa_sprintf_malloc("%s:%s", basekeyname, (port ? port : "null"));
+    r = perportentry_write_raw_name(u, name, e);
     pa_xfree(name);
 
     return r;
 }
 
-static struct perportentry* perportentry_read(struct userdata *u, const char *basekeyname, const char *port) {
+static struct perportentry *perportentry_read_raw_name(struct userdata *u, const char *name) {
     pa_datum key, data;
     struct perportentry *e = NULL;
     pa_tagstruct *t = NULL;
     uint8_t i, n_formats;
-    char *name;
 
     pa_assert(u);
-    pa_assert(basekeyname);
-
-    name = pa_sprintf_malloc("%s:%s", basekeyname, (port ? port : "null"));
+    pa_assert(name);
 
-    key.data = name;
+    key.data = (char *) name;
     key.size = strlen(name);
 
     pa_zero(data);
@@ -457,7 +465,6 @@ static struct perportentry* perportentry_read(struct userdata *u, const char *ba
 
     pa_tagstruct_free(t);
     pa_datum_free(&data);
-    pa_xfree(name);
 
     return e;
 
@@ -470,18 +477,29 @@ fail:
 
     pa_datum_free(&data);
 
+    return NULL;
+}
+
+static struct perportentry* perportentry_read(struct userdata *u, const char *basekeyname, const char *port) {
+    struct perportentry *e = NULL;
+    char *name;
+
+    pa_assert(u);
+    pa_assert(basekeyname);
+
+    name = pa_sprintf_malloc("%s:%s", basekeyname, (port ? port : "null"));
+    e = perportentry_read_raw_name(u, name);
+    pa_xfree(name);
+
+    if (e)
+        return e;
+
 #ifdef ENABLE_LEGACY_DATABASE_ENTRY_FORMAT
     /* Try again with a null port. This is used when dealing with migration from older versions */
-    if (port) {
-        pa_xfree(name);
+    if (port)
         return perportentry_read(u, basekeyname, NULL);
-    }
 #endif
 
-    pa_log_debug("Database contains invalid data for key: %s", name);
-
-    pa_xfree(name);
-
     return NULL;
 }
 
-- 
1.7.10.4



More information about the pulseaudio-discuss mailing list