summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-11-05 01:33:25 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-11-09 21:39:09 +0900
commitc6df73ca72ecbe5c9a41ff19b49f7187fa326a58 (patch)
treedc1ff2d6620425d6a08d6d28ae0850a90eecbd3c /src
parentaa4f765326aa75622f1ab50068ca824ed33ecf8e (diff)
downloadsystemd-c6df73ca72ecbe5c9a41ff19b49f7187fa326a58.tar.gz
ether-addr-util: introduce {hw,ether}_addr_hash_ops_free
Diffstat (limited to 'src')
-rw-r--r--src/basic/ether-addr-util.c2
-rw-r--r--src/basic/ether-addr-util.h2
-rw-r--r--src/network/netdev/macvlan.c2
-rw-r--r--src/shared/conf-parser.c6
-rw-r--r--src/shared/net-condition.c6
5 files changed, 10 insertions, 8 deletions
diff --git a/src/basic/ether-addr-util.c b/src/basic/ether-addr-util.c
index ed0883886a..9be4baf123 100644
--- a/src/basic/ether-addr-util.c
+++ b/src/basic/ether-addr-util.c
@@ -48,6 +48,7 @@ static void hw_addr_hash_func(const struct hw_addr_data *p, struct siphash *stat
}
DEFINE_HASH_OPS(hw_addr_hash_ops, struct hw_addr_data, hw_addr_hash_func, hw_addr_compare);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(hw_addr_hash_ops_free, struct hw_addr_data, hw_addr_hash_func, hw_addr_compare, free);
char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]) {
assert(addr);
@@ -93,6 +94,7 @@ static void ether_addr_hash_func(const struct ether_addr *p, struct siphash *sta
}
DEFINE_HASH_OPS(ether_addr_hash_ops, struct ether_addr, ether_addr_hash_func, ether_addr_compare);
+DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(ether_addr_hash_ops_free, struct ether_addr, ether_addr_hash_func, ether_addr_compare, free);
static int parse_hw_addr_one_field(const char **s, char sep, size_t len, uint8_t *buf) {
const char *hex = HEXDIGITS, *p;
diff --git a/src/basic/ether-addr-util.h b/src/basic/ether-addr-util.h
index 62afe458b0..ae6605fb11 100644
--- a/src/basic/ether-addr-util.h
+++ b/src/basic/ether-addr-util.h
@@ -51,6 +51,7 @@ static inline bool hw_addr_is_null(const struct hw_addr_data *addr) {
}
extern const struct hash_ops hw_addr_hash_ops;
+extern const struct hash_ops hw_addr_hash_ops_free;
#define ETHER_ADDR_FORMAT_STR "%02X%02X%02X%02X%02X%02X"
#define ETHER_ADDR_FORMAT_VAL(x) (x).ether_addr_octet[0], (x).ether_addr_octet[1], (x).ether_addr_octet[2], (x).ether_addr_octet[3], (x).ether_addr_octet[4], (x).ether_addr_octet[5]
@@ -93,3 +94,4 @@ static inline bool ether_addr_is_local(const struct ether_addr *addr) {
}
extern const struct hash_ops ether_addr_hash_ops;
+extern const struct hash_ops ether_addr_hash_ops_free;
diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c
index 9d037c2f36..c295cae2cd 100644
--- a/src/network/netdev/macvlan.c
+++ b/src/network/netdev/macvlan.c
@@ -127,7 +127,7 @@ static void macvlan_done(NetDev *n) {
assert(m);
- set_free_free(m->match_source_mac);
+ set_free(m->match_source_mac);
}
static void macvlan_init(NetDev *n) {
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index f0633a71d1..35027b8dfa 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -1384,7 +1384,7 @@ int config_parse_ether_addrs(
if (isempty(rvalue)) {
/* Empty assignment resets the list */
- *hwaddrs = set_free_free(*hwaddrs);
+ *hwaddrs = set_free(*hwaddrs);
return 0;
}
@@ -1414,11 +1414,9 @@ int config_parse_ether_addrs(
continue;
}
- r = set_ensure_put(hwaddrs, &ether_addr_hash_ops, n);
+ r = set_ensure_consume(hwaddrs, &ether_addr_hash_ops_free, TAKE_PTR(n));
if (r < 0)
return log_oom();
- if (r > 0)
- TAKE_PTR(n); /* avoid cleanup */
}
}
diff --git a/src/shared/net-condition.c b/src/shared/net-condition.c
index 52cac19df3..ac0a364f06 100644
--- a/src/shared/net-condition.c
+++ b/src/shared/net-condition.c
@@ -17,8 +17,8 @@ void net_match_clear(NetMatch *match) {
if (!match)
return;
- match->mac = set_free_free(match->mac);
- match->permanent_mac = set_free_free(match->permanent_mac);
+ match->mac = set_free(match->mac);
+ match->permanent_mac = set_free(match->permanent_mac);
match->path = strv_free(match->path);
match->driver = strv_free(match->driver);
match->iftype = strv_free(match->iftype);
@@ -26,7 +26,7 @@ void net_match_clear(NetMatch *match) {
match->property = strv_free(match->property);
match->wlan_iftype = strv_free(match->wlan_iftype);
match->ssid = strv_free(match->ssid);
- match->bssid = set_free_free(match->bssid);
+ match->bssid = set_free(match->bssid);
}
bool net_match_is_empty(const NetMatch *match) {