static void test_hashmap_remove_and_put(void) { _cleanup_hashmap_free_ Hashmap *m = NULL; int valid; char *r; log_info("%s", __func__); m = hashmap_new(&string_hash_ops); assert_se(m); valid = hashmap_remove_and_put(m, "invalid key", "new key", NULL); assert_se(valid == -ENOENT); valid = hashmap_put(m, "key 1", (void*) (const char *) "val 1"); assert_se(valid == 1); valid = hashmap_remove_and_put(NULL, "key 1", "key 2", (void*) (const char *) "val 2"); assert_se(valid == -ENOENT); valid = hashmap_remove_and_put(m, "key 1", "key 2", (void*) (const char *) "val 2"); assert_se(valid == 0); r = hashmap_get(m, "key 2"); assert_se(streq(r, "val 2")); assert_se(!hashmap_get(m, "key 1")); valid = hashmap_put(m, "key 3", (void*) (const char *) "val 3"); assert_se(valid == 1); valid = hashmap_remove_and_put(m, "key 3", "key 2", (void*) (const char *) "val 2"); assert_se(valid == -EEXIST); }
int set_remove_and_put(Set *s, void *old_value, void *new_value) { return hashmap_remove_and_put(MAKE_HASHMAP(s), old_value, new_value, new_value); }