]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/tagstruct.c
beefup proplist handling for sound events
[pulseaudio] / src / pulsecore / tagstruct.c
index 92bace277e8348f88cffb89a33a7b2a1cf09cee6..7616cd16438a9400eae8cee5d8563bb2211b1193 100644 (file)
@@ -570,10 +570,11 @@ int pa_tagstruct_get_proplist(pa_tagstruct *t, pa_proplist *p) {
         return -1;
 
     saved_rindex = t->rindex;
+    t->rindex++;
 
     for (;;) {
         const char *k;
-        void *d;
+        const void *d;
         uint32_t length;
 
         if (pa_tagstruct_gets(t, &k) < 0)
@@ -588,17 +589,11 @@ int pa_tagstruct_get_proplist(pa_tagstruct *t, pa_proplist *p) {
         if (length > MAX_TAG_SIZE)
             goto fail;
 
-        d = pa_xmalloc(length);
-
-        if (pa_tagstruct_get_arbitrary(t, d, length) < 0)
+        if (pa_tagstruct_get_arbitrary(t, &d, length) < 0)
             goto fail;
 
-        if (pa_proplist_set(p, k, d, length) < 0) {
-            pa_xfree(d);
+        if (pa_proplist_set(p, k, d, length) < 0)
             goto fail;
-        }
-
-        pa_xfree(d);
     }
 
     return 0;
@@ -672,6 +667,7 @@ void pa_tagstruct_put(pa_tagstruct *t, ...) {
 
             case PA_TAG_PROPLIST:
                 pa_tagstruct_put_proplist(t, va_arg(va, pa_proplist *));
+                break;
 
             default:
                 pa_assert_not_reached();
@@ -746,6 +742,7 @@ int pa_tagstruct_get(pa_tagstruct *t, ...) {
 
             case PA_TAG_PROPLIST:
                 ret = pa_tagstruct_get_proplist(t, va_arg(va, pa_proplist *));
+                break;
 
             default:
                 pa_assert_not_reached();