From d5099efc47d4e6ac60816b5381a5f607ab03f06e Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Wed, 13 Aug 2014 01:00:18 +0200 Subject: hashmap: introduce hash_ops to make struct Hashmap smaller It is redundant to store 'hash' and 'compare' function pointers in struct Hashmap separately. The functions always comprise a pair. Store a single pointer to struct hash_ops instead. systemd keeps hundreds of hashmaps, so this saves a little bit of memory. --- src/network/networkd-link.c | 2 +- src/network/networkd-manager.c | 8 ++++---- src/network/networkd-network.c | 6 +++--- src/network/networkd-wait-online-link.c | 5 ++--- 4 files changed, 10 insertions(+), 11 deletions(-) (limited to 'src/network') diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 11ac1307d8..9bf1a811c9 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -206,7 +206,7 @@ static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) { if (r < 0) return -ENOMEM; - r = hashmap_ensure_allocated(&manager->links, NULL, NULL); + r = hashmap_ensure_allocated(&manager->links, NULL); if (r < 0) return r; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 1614bc0091..2213ad717c 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -115,7 +115,7 @@ int manager_new(Manager **ret) { return -ENOMEM; } - m->netdevs = hashmap_new(string_hash_func, string_compare_func); + m->netdevs = hashmap_new(&string_hash_ops); if (!m->netdevs) return -ENOMEM; @@ -485,15 +485,15 @@ int manager_save(Manager *m) { assert(m->state_file); /* We add all NTP and DNS server to a set, to filter out duplicates */ - dns = set_new(string_hash_func, string_compare_func); + dns = set_new(&string_hash_ops); if (!dns) return -ENOMEM; - ntp = set_new(string_hash_func, string_compare_func); + ntp = set_new(&string_hash_ops); if (!ntp) return -ENOMEM; - domains = set_new(string_hash_func, string_compare_func); + domains = set_new(&string_hash_ops); if (!domains) return -ENOMEM; diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index a2e27e0910..aad99236c4 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -63,15 +63,15 @@ static int network_load_one(Manager *manager, const char *filename) { LIST_HEAD_INIT(network->static_addresses); LIST_HEAD_INIT(network->static_routes); - network->stacked_netdevs = hashmap_new(string_hash_func, string_compare_func); + network->stacked_netdevs = hashmap_new(&string_hash_ops); if (!network->stacked_netdevs) return log_oom(); - network->addresses_by_section = hashmap_new(NULL, NULL); + network->addresses_by_section = hashmap_new(NULL); if (!network->addresses_by_section) return log_oom(); - network->routes_by_section = hashmap_new(NULL, NULL); + network->routes_by_section = hashmap_new(NULL); if (!network->routes_by_section) return log_oom(); diff --git a/src/network/networkd-wait-online-link.c b/src/network/networkd-wait-online-link.c index f23c7ceb80..268ab676c9 100644 --- a/src/network/networkd-wait-online-link.c +++ b/src/network/networkd-wait-online-link.c @@ -34,12 +34,11 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) { assert(m); assert(ifindex > 0); - r = hashmap_ensure_allocated(&m->links, NULL, NULL); + r = hashmap_ensure_allocated(&m->links, NULL); if (r < 0) return r; - r = hashmap_ensure_allocated(&m->links_by_name, - string_hash_func, string_compare_func); + r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops); if (r < 0) return r; -- cgit v1.2.3-54-g00ecf