mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-06 13:17:44 +03:00
hashmap: allow hashmap_move() to fail
It cannot fail in the current hashmap implementation, but it may fail in alternative implementations (unless a sufficiently large reservation has been placed beforehand).
This commit is contained in:
parent
09a65f9299
commit
7ad63f57b6
@ -815,16 +815,16 @@ int hashmap_reserve(Hashmap *h, unsigned entries_add) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hashmap_move(Hashmap *h, Hashmap *other) {
|
||||
int hashmap_move(Hashmap *h, Hashmap *other) {
|
||||
struct hashmap_entry *e, *n;
|
||||
|
||||
assert(h);
|
||||
|
||||
/* The same as hashmap_merge(), but every new item from other
|
||||
* is moved to h. This function is guaranteed to succeed. */
|
||||
* is moved to h. */
|
||||
|
||||
if (!other)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
for (e = other->iterate_list_head; e; e = n) {
|
||||
unsigned h_hash, other_hash;
|
||||
@ -839,6 +839,8 @@ void hashmap_move(Hashmap *h, Hashmap *other) {
|
||||
unlink_entry(other, e, other_hash);
|
||||
link_entry(h, e, h_hash);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key) {
|
||||
|
@ -160,9 +160,9 @@ int hashmap_reserve(Hashmap *h, unsigned entries_add);
|
||||
static inline int ordered_hashmap_reserve(OrderedHashmap *h, unsigned entries_add) {
|
||||
return hashmap_reserve((Hashmap*) h, entries_add);
|
||||
}
|
||||
void hashmap_move(Hashmap *h, Hashmap *other);
|
||||
static inline void ordered_hashmap_move(OrderedHashmap *h, OrderedHashmap *other) {
|
||||
hashmap_move((Hashmap*) h, (Hashmap*) other);
|
||||
int hashmap_move(Hashmap *h, Hashmap *other);
|
||||
static inline int ordered_hashmap_move(OrderedHashmap *h, OrderedHashmap *other) {
|
||||
return hashmap_move((Hashmap*) h, (Hashmap*) other);
|
||||
}
|
||||
int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key);
|
||||
static inline int ordered_hashmap_move_one(OrderedHashmap *h, OrderedHashmap *other, const void *key) {
|
||||
|
@ -141,7 +141,7 @@ int set_reserve(Set *s, unsigned entries_add) {
|
||||
return hashmap_reserve(MAKE_HASHMAP(s), entries_add);
|
||||
}
|
||||
|
||||
void set_move(Set *s, Set *other) {
|
||||
int set_move(Set *s, Set *other) {
|
||||
return hashmap_move(MAKE_HASHMAP(s), MAKE_HASHMAP(other));
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ int set_remove_and_put(Set *s, void *old_value, void *new_value);
|
||||
|
||||
int set_merge(Set *s, Set *other);
|
||||
int set_reserve(Set *s, unsigned entries_add);
|
||||
void set_move(Set *s, Set *other);
|
||||
int set_move(Set *s, Set *other);
|
||||
int set_move_one(Set *s, Set *other, void *value);
|
||||
|
||||
unsigned set_size(Set *s);
|
||||
|
@ -194,8 +194,8 @@ static void test_hashmap_move(void) {
|
||||
hashmap_put(m, "key 3", val3);
|
||||
hashmap_put(m, "key 4", val4);
|
||||
|
||||
hashmap_move(n, NULL);
|
||||
hashmap_move(n, m);
|
||||
assert(hashmap_move(n, NULL) == 0);
|
||||
assert(hashmap_move(n, m) == 0);
|
||||
|
||||
assert_se(hashmap_size(m) == 1);
|
||||
r = hashmap_get(m, "key 1");
|
||||
|
Loading…
Reference in New Issue
Block a user