pipewire: properties: introduce pw_properties_{steal,gift}

Add functions

  pw_properties_steal(properties, key);
  pw_properties_gift(properties, key, value);

which can be used to retrieve/insert key-value pairs from/into
a property list without creating unnecessary copies of the value.

Add tests as well.
This commit is contained in:
Barnabás Pőcze 2021-06-16 19:03:43 +02:00
parent be18d052ad
commit a6151e96cd
3 changed files with 100 additions and 0 deletions

View file

@ -683,6 +683,41 @@ PWTEST(properties_move)
return PWTEST_PASS;
}
PWTEST(properties_steal_gift)
{
struct pw_properties *a = pw_properties_new(NULL, NULL),
*b = pw_properties_new(NULL, NULL);
char *v1, *v2;
pwtest_ptr_notnull(a);
pwtest_ptr_notnull(b);
pwtest_int_eq(pw_properties_set(a, "a1", "value1"), 1);
pwtest_int_eq(pw_properties_set(a, "a2", "value2"), 1);
pwtest_int_eq(pw_properties_set(a, "a3", "value3"), 1);
pwtest_int_eq(pw_properties_set(a, "a4", "value4"), 1);
pwtest_str_eq(pw_properties_steal(a, "a5"), NULL);
v1 = pw_properties_steal(a, "a2");
pwtest_str_eq(v1, "value2");
pwtest_ptr_null(pw_properties_get(a, "a2"));
v2 = strdup(v1);
pwtest_ptr_notnull(v2);
pwtest_int_eq(pw_properties_gift(b, "b3", v1), 1);
pwtest_str_eq(pw_properties_get(b, "b3"), "value2");
pwtest_int_eq(pw_properties_gift(b, "b3", v2), 0);
pwtest_str_eq(pw_properties_get(b, "b3"), "value2");
pw_properties_free(a);
pw_properties_free(b);
return PWTEST_PASS;
}
PWTEST_SUITE(properties)
{
pwtest_add(properties_abi, PWTEST_NOARG);
@ -703,6 +738,7 @@ PWTEST_SUITE(properties)
pwtest_add(properties_new_json, PWTEST_NOARG);
pwtest_add(properties_update, PWTEST_NOARG);
pwtest_add(properties_move, PWTEST_NOARG);
pwtest_add(properties_steal_gift, PWTEST_NOARG);
return PWTEST_PASS;
}