return 0;
}
+/** Will accept only valid UTF-8 */
+int pa_proplist_setp(pa_proplist *p, const char *pair) {
+ const char *t;
+
+ pa_assert(p);
+ pa_assert(pair);
+
+ if (!(t = strchr(pair, '=')))
+ return -1;
+
+ return proplist_setn(p,
+ pair, t - pair,
+ t + 1, strchr(pair, 0) - t - 1);
+}
+
static int proplist_sethex(pa_proplist *p, const char *key, size_t key_length, const char *value, size_t value_length) {
struct property *prop;
pa_bool_t add = FALSE;
pa_assert(p);
pa_assert(key);
- pa_assert(data);
+ pa_assert(data || nbytes == 0);
if (!property_name_valid(key))
return -1;
pa_xfree(prop->value);
prop->value = pa_xmalloc(nbytes+1);
- memcpy(prop->value, data, nbytes);
+ if (nbytes > 0)
+ memcpy(prop->value, data, nbytes);
((char*) prop->value)[nbytes] = 0;
prop->nbytes = nbytes;
return pa_hashmap_isempty(MAKE_HASHMAP(p));
}
+
+int pa_proplist_equal(pa_proplist *a, pa_proplist *b) {
+ const void *key = NULL;
+ struct property *a_prop = NULL;
+ struct property *b_prop = NULL;
+ void *state = NULL;
+
+ pa_assert(a);
+ pa_assert(b);
+
+ if (a == b)
+ return 1;
+
+ if (pa_proplist_size(a) != pa_proplist_size(b))
+ return 0;
+
+ while ((a_prop = pa_hashmap_iterate(MAKE_HASHMAP(a), &state, &key))) {
+ if (!(b_prop = pa_hashmap_get(MAKE_HASHMAP(b), key)))
+ return 0;
+
+ if (a_prop->nbytes != b_prop->nbytes)
+ return 0;
+
+ if (memcmp(a_prop->value, b_prop->value, a_prop->nbytes) != 0)
+ return 0;
+ }
+
+ return 1;
+}