static void test_hashmap_remove2(void) { _cleanup_hashmap_free_free_free_ Hashmap *m = NULL; char key1[] = "key 1"; char key2[] = "key 2"; char val1[] = "val 1"; char val2[] = "val 2"; void *r, *r2; log_info("%s", __func__); r = hashmap_remove2(NULL, "key 1", &r2); assert_se(r == NULL); m = hashmap_new(&string_hash_ops); assert_se(m); r = hashmap_remove2(m, "no such key", &r2); assert_se(r == NULL); hashmap_put(m, strdup(key1), strdup(val1)); hashmap_put(m, strdup(key2), strdup(val2)); r = hashmap_remove2(m, key1, &r2); assert_se(streq(r, val1)); assert_se(streq(r2, key1)); free(r); free(r2); r = hashmap_get(m, key2); assert_se(streq(r, val2)); assert_se(!hashmap_get(m, key1)); }
_public_ int sd_bus_track_remove_name(sd_bus_track *track, const char *name) { _cleanup_bus_slot_unref_ sd_bus_slot *slot = NULL; _cleanup_free_ char *n = NULL; assert_return(name, -EINVAL); if (!track) return 0; slot = hashmap_remove2(track->names, (char*) name, (void**) &n); if (!slot) return 0; if (hashmap_isempty(track->names)) bus_track_add_to_queue(track); track->modified = true; return 1; }