mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
Merge pull request #18299 from ssahani/ensure-put
More use of hashmap_ensure_put and ordered_hashmap_ensure_put
This commit is contained in:
commit
ceed428305
@ -679,12 +679,6 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = set_ensure_allocated(&m->private_buses, NULL);
|
|
||||||
if (r < 0) {
|
|
||||||
log_oom();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_bus_new(&bus);
|
r = sd_bus_new(&bus);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_warning_errno(r, "Failed to allocate new private connection bus: %m");
|
log_warning_errno(r, "Failed to allocate new private connection bus: %m");
|
||||||
@ -752,13 +746,17 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = set_put(m->private_buses, bus);
|
r = set_ensure_put(&m->private_buses, NULL, bus);
|
||||||
|
if (r == -ENOMEM) {
|
||||||
|
log_oom();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_warning_errno(r, "Failed to add new connection bus to set: %m");
|
log_warning_errno(r, "Failed to add new connection bus to set: %m");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bus = NULL;
|
TAKE_PTR(bus);
|
||||||
|
|
||||||
log_debug("Accepted new private connection.");
|
log_debug("Accepted new private connection.");
|
||||||
|
|
||||||
|
@ -6069,15 +6069,11 @@ static int exec_runtime_add(
|
|||||||
|
|
||||||
/* tmp_dir, var_tmp_dir, netns_storage_socket fds are donated on success */
|
/* tmp_dir, var_tmp_dir, netns_storage_socket fds are donated on success */
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&m->exec_runtime_by_id, &string_hash_ops);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = exec_runtime_allocate(&rt, id);
|
r = exec_runtime_allocate(&rt, id);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = hashmap_put(m->exec_runtime_by_id, rt->id, rt);
|
r = hashmap_ensure_put(&m->exec_runtime_by_id, &string_hash_ops, rt->id, rt);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -648,11 +648,7 @@ static int transaction_apply(
|
|||||||
assert(!j->transaction_prev);
|
assert(!j->transaction_prev);
|
||||||
assert(!j->transaction_next);
|
assert(!j->transaction_next);
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&m->jobs, NULL);
|
r = hashmap_ensure_put(&m->jobs, NULL, UINT32_TO_PTR(j->id), j);
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = hashmap_put(m->jobs, UINT32_TO_PTR(j->id), j);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
@ -149,10 +149,6 @@ static int transfer_new(Manager *m, Transfer **ret) {
|
|||||||
if (hashmap_size(m->transfers) >= TRANSFERS_MAX)
|
if (hashmap_size(m->transfers) >= TRANSFERS_MAX)
|
||||||
return -E2BIG;
|
return -E2BIG;
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&m->transfers, &trivial_hash_ops);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
t = new(Transfer, 1);
|
t = new(Transfer, 1);
|
||||||
if (!t)
|
if (!t)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -171,7 +167,7 @@ static int transfer_new(Manager *m, Transfer **ret) {
|
|||||||
if (asprintf(&t->object_path, "/org/freedesktop/import1/transfer/_%" PRIu32, id) < 0)
|
if (asprintf(&t->object_path, "/org/freedesktop/import1/transfer/_%" PRIu32, id) < 0)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
r = hashmap_put(m->transfers, UINT32_TO_PTR(id), t);
|
r = hashmap_ensure_put(&m->transfers, &trivial_hash_ops, UINT32_TO_PTR(id), t);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -102,17 +102,13 @@ static int client_context_compare(const void *a, const void *b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int client_context_new(Server *s, pid_t pid, ClientContext **ret) {
|
static int client_context_new(Server *s, pid_t pid, ClientContext **ret) {
|
||||||
ClientContext *c;
|
_cleanup_free_ ClientContext *c = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
assert(pid_is_valid(pid));
|
assert(pid_is_valid(pid));
|
||||||
assert(ret);
|
assert(ret);
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&s->client_contexts, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = prioq_ensure_allocated(&s->client_contexts_lru, client_context_compare);
|
r = prioq_ensure_allocated(&s->client_contexts_lru, client_context_compare);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
@ -136,13 +132,11 @@ static int client_context_new(Server *s, pid_t pid, ClientContext **ret) {
|
|||||||
.log_ratelimit_burst = s->ratelimit_burst,
|
.log_ratelimit_burst = s->ratelimit_burst,
|
||||||
};
|
};
|
||||||
|
|
||||||
r = hashmap_put(s->client_contexts, PID_TO_PTR(pid), c);
|
r = hashmap_ensure_put(&s->client_contexts, NULL, PID_TO_PTR(pid), c);
|
||||||
if (r < 0) {
|
if (r < 0)
|
||||||
free(c);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
|
||||||
|
|
||||||
*ret = c;
|
*ret = TAKE_PTR(c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,11 +234,7 @@ int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option *
|
|||||||
assert_return(client, -EINVAL);
|
assert_return(client, -EINVAL);
|
||||||
assert_return(v, -EINVAL);
|
assert_return(v, -EINVAL);
|
||||||
|
|
||||||
r = ordered_hashmap_ensure_allocated(&client->vendor_options, &dhcp6_option_hash_ops);
|
r = ordered_hashmap_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v, v);
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = ordered_hashmap_put(client->vendor_options, v, v);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
@ -567,11 +563,7 @@ int sd_dhcp6_client_add_option(sd_dhcp6_client *client, sd_dhcp6_option *v) {
|
|||||||
assert_return(client, -EINVAL);
|
assert_return(client, -EINVAL);
|
||||||
assert_return(v, -EINVAL);
|
assert_return(v, -EINVAL);
|
||||||
|
|
||||||
r = ordered_hashmap_ensure_allocated(&client->extra_options, &dhcp6_option_hash_ops);
|
r = ordered_hashmap_ensure_put(&client->extra_options, &dhcp6_option_hash_ops, UINT_TO_PTR(v->option), v);
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = ordered_hashmap_put(client->extra_options, UINT_TO_PTR(v->option), v);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -115,19 +115,11 @@ static int lookup_id(sd_netlink *nl, sd_genl_family family, uint16_t *id) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&nl->genl_family_to_nlmsg_type, NULL);
|
r = hashmap_ensure_put(&nl->genl_family_to_nlmsg_type, NULL, INT_TO_PTR(family), UINT_TO_PTR(u));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&nl->nlmsg_type_to_genl_family, NULL);
|
r = hashmap_ensure_put(&nl->nlmsg_type_to_genl_family, NULL, UINT_TO_PTR(u), INT_TO_PTR(family));
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = hashmap_put(nl->genl_family_to_nlmsg_type, INT_TO_PTR(family), UINT_TO_PTR(u));
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = hashmap_put(nl->nlmsg_type_to_genl_family, UINT_TO_PTR(u), INT_TO_PTR(family));
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -342,10 +342,6 @@ int config_parse_arp_ip_target_address(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = ordered_set_ensure_allocated(&b->arp_ip_targets, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
if (ordered_set_size(b->arp_ip_targets) >= NETDEV_BOND_ARP_TARGETS_MAX) {
|
if (ordered_set_size(b->arp_ip_targets) >= NETDEV_BOND_ARP_TARGETS_MAX) {
|
||||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||||
"Too many ARP IP targets are specified. The maximum number is %d. Ignoring assignment: %s",
|
"Too many ARP IP targets are specified. The maximum number is %d. Ignoring assignment: %s",
|
||||||
@ -353,7 +349,9 @@ int config_parse_arp_ip_target_address(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = ordered_set_put(b->arp_ip_targets, UINT32_TO_PTR(ip.in.s_addr));
|
r = ordered_set_ensure_put(&b->arp_ip_targets, NULL, UINT32_TO_PTR(ip.in.s_addr));
|
||||||
|
if (r == -ENOMEM)
|
||||||
|
return log_oom();
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||||
"Bond ARP IP target address is duplicated, ignoring assignment: %s", n);
|
"Bond ARP IP target address is duplicated, ignoring assignment: %s", n);
|
||||||
|
@ -143,11 +143,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig
|
|||||||
prefix->network = network;
|
prefix->network = network;
|
||||||
prefix->section = TAKE_PTR(n);
|
prefix->section = TAKE_PTR(n);
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&network->route_prefixes_by_section, &network_config_hash_ops);
|
r = hashmap_ensure_put(&network->route_prefixes_by_section, &network_config_hash_ops, prefix->section, prefix);
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = hashmap_put(network->route_prefixes_by_section, prefix->section, prefix);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -15,14 +15,7 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
|
|||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(ifindex > 0);
|
assert(ifindex > 0);
|
||||||
|
assert(ifname);
|
||||||
r = hashmap_ensure_allocated(&m->links, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
n = strdup(ifname);
|
n = strdup(ifname);
|
||||||
if (!n)
|
if (!n)
|
||||||
@ -39,11 +32,11 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
|
|||||||
.required_operstate = LINK_OPERSTATE_RANGE_DEFAULT,
|
.required_operstate = LINK_OPERSTATE_RANGE_DEFAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
r = hashmap_put(m->links_by_name, l->ifname, l);
|
r = hashmap_ensure_put(&m->links, NULL, INT_TO_PTR(ifindex), l);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = hashmap_put(m->links, INT_TO_PTR(ifindex), l);
|
r = hashmap_ensure_put(&m->links_by_name, &string_hash_ops, l->ifname, l);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -31,17 +31,15 @@ static int track_pid(Hashmap **h, const char *path, pid_t pid) {
|
|||||||
assert(path);
|
assert(path);
|
||||||
assert(pid_is_valid(pid));
|
assert(pid_is_valid(pid));
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(h, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
c = strdup(path);
|
c = strdup(path);
|
||||||
if (!c)
|
if (!c)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
r = hashmap_put(*h, PID_TO_PTR(pid), c);
|
r = hashmap_ensure_put(h, NULL, PID_TO_PTR(pid), c);
|
||||||
if (r < 0)
|
if (r == -ENOMEM)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to store pid " PID_FMT, pid);
|
||||||
|
|
||||||
TAKE_PTR(c);
|
TAKE_PTR(c);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -27,10 +27,6 @@ int link_new(Manager *m, Link **ret, int ifindex) {
|
|||||||
assert(m);
|
assert(m);
|
||||||
assert(ifindex > 0);
|
assert(ifindex > 0);
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&m->links, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
l = new(Link, 1);
|
l = new(Link, 1);
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -48,7 +44,7 @@ int link_new(Manager *m, Link **ret, int ifindex) {
|
|||||||
if (asprintf(&l->state_file, "/run/systemd/resolve/netif/%i", ifindex) < 0)
|
if (asprintf(&l->state_file, "/run/systemd/resolve/netif/%i", ifindex) < 0)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
r = hashmap_put(m->links, INT_TO_PTR(ifindex), l);
|
r = hashmap_ensure_put(&m->links, NULL, INT_TO_PTR(ifindex), l);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
@ -56,7 +52,7 @@ int link_new(Manager *m, Link **ret, int ifindex) {
|
|||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
*ret = l;
|
*ret = l;
|
||||||
l = NULL;
|
TAKE_PTR(l);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -104,11 +104,7 @@ static int add_process(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = hashmap_ensure_allocated(&cg->pids, &trivial_hash_ops);
|
return hashmap_ensure_put(&cg->pids, &trivial_hash_ops, PID_TO_PTR(pid), (void*) name);
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return hashmap_put(cg->pids, PID_TO_PTR(pid), (void*) name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void remove_cgroup(Hashmap *cgroups, struct CGroupInfo *cg) {
|
static void remove_cgroup(Hashmap *cgroups, struct CGroupInfo *cg) {
|
||||||
|
@ -2391,14 +2391,13 @@ int varlink_server_bind_method(VarlinkServer *s, const char *method, VarlinkMeth
|
|||||||
if (startswith(method, "org.varlink.service."))
|
if (startswith(method, "org.varlink.service."))
|
||||||
return log_debug_errno(SYNTHETIC_ERRNO(EEXIST), "Cannot bind server to '%s'.", method);
|
return log_debug_errno(SYNTHETIC_ERRNO(EEXIST), "Cannot bind server to '%s'.", method);
|
||||||
|
|
||||||
if (hashmap_ensure_allocated(&s->methods, &string_hash_ops) < 0)
|
|
||||||
return log_oom_debug();
|
|
||||||
|
|
||||||
m = strdup(method);
|
m = strdup(method);
|
||||||
if (!m)
|
if (!m)
|
||||||
return log_oom_debug();
|
return log_oom_debug();
|
||||||
|
|
||||||
r = hashmap_put(s->methods, m, callback);
|
r = hashmap_ensure_put(&s->methods, &string_hash_ops, m, callback);
|
||||||
|
if (r == -ENOMEM)
|
||||||
|
return log_oom_debug();
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_debug_errno(r, "Failed to register callback: %m");
|
return log_debug_errno(r, "Failed to register callback: %m");
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
|
@ -1298,10 +1298,6 @@ static int add_implicit(void) {
|
|||||||
if (!ordered_hashmap_get(users, *m)) {
|
if (!ordered_hashmap_get(users, *m)) {
|
||||||
_cleanup_(item_freep) Item *j = NULL;
|
_cleanup_(item_freep) Item *j = NULL;
|
||||||
|
|
||||||
r = ordered_hashmap_ensure_allocated(&users, &item_hash_ops);
|
|
||||||
if (r < 0)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
j = new0(Item, 1);
|
j = new0(Item, 1);
|
||||||
if (!j)
|
if (!j)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
@ -1311,22 +1307,20 @@ static int add_implicit(void) {
|
|||||||
if (!j->name)
|
if (!j->name)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
r = ordered_hashmap_put(users, j->name, j);
|
r = ordered_hashmap_ensure_put(&users, &item_hash_ops, j->name, j);
|
||||||
if (r < 0)
|
if (r == -ENOMEM)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to add implicit user '%s': %m", j->name);
|
||||||
|
|
||||||
log_debug("Adding implicit user '%s' due to m line", j->name);
|
log_debug("Adding implicit user '%s' due to m line", j->name);
|
||||||
j = NULL;
|
TAKE_PTR(j);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ordered_hashmap_get(users, g) ||
|
if (!(ordered_hashmap_get(users, g) ||
|
||||||
ordered_hashmap_get(groups, g))) {
|
ordered_hashmap_get(groups, g))) {
|
||||||
_cleanup_(item_freep) Item *j = NULL;
|
_cleanup_(item_freep) Item *j = NULL;
|
||||||
|
|
||||||
r = ordered_hashmap_ensure_allocated(&groups, &item_hash_ops);
|
|
||||||
if (r < 0)
|
|
||||||
return log_oom();
|
|
||||||
|
|
||||||
j = new0(Item, 1);
|
j = new0(Item, 1);
|
||||||
if (!j)
|
if (!j)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
@ -1336,12 +1330,14 @@ static int add_implicit(void) {
|
|||||||
if (!j->name)
|
if (!j->name)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
r = ordered_hashmap_put(groups, j->name, j);
|
r = ordered_hashmap_ensure_put(&groups, &item_hash_ops, j->name, j);
|
||||||
if (r < 0)
|
if (r == -ENOMEM)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to add implicit group '%s': %m", j->name);
|
||||||
|
|
||||||
log_debug("Adding implicit group '%s' due to m line", j->name);
|
log_debug("Adding implicit group '%s' due to m line", j->name);
|
||||||
j = NULL;
|
TAKE_PTR(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user