_public_ int sd_lldp_new(sd_lldp **ret, int ifindex) { _cleanup_(sd_lldp_unrefp) sd_lldp *lldp = NULL; int r; assert_return(ret, -EINVAL); assert_return(ifindex > 0, -EINVAL); lldp = new0(sd_lldp, 1); if (!lldp) return -ENOMEM; lldp->fd = -1; lldp->ifindex = ifindex; lldp->neighbors_max = LLDP_DEFAULT_NEIGHBORS_MAX; lldp->capability_mask = (uint16_t) -1; lldp->neighbor_by_id = hashmap_new(&lldp_neighbor_id_hash_ops); if (!lldp->neighbor_by_id) return -ENOMEM; r = prioq_ensure_allocated(&lldp->neighbor_by_expiry, lldp_neighbor_prioq_compare_func); if (r < 0) return r; *ret = lldp; lldp = NULL; return 0; }
static int client_context_new(Server *s, pid_t pid, ClientContext **ret) { ClientContext *c; int r; assert(s); assert(pid_is_valid(pid)); 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); if (r < 0) return r; c = new0(ClientContext, 1); if (!c) return -ENOMEM; c->pid = pid; c->uid = UID_INVALID; c->gid = GID_INVALID; c->auditid = AUDIT_SESSION_INVALID; c->loginuid = UID_INVALID; c->owner_uid = UID_INVALID; c->lru_index = PRIOQ_IDX_NULL; c->timestamp = USEC_INFINITY; c->extra_fields_mtime = NSEC_INFINITY; c->log_level_max = -1; c->log_rate_limit_interval = s->rate_limit_interval; c->log_rate_limit_burst = s->rate_limit_burst; r = hashmap_put(s->client_contexts, PID_TO_PTR(pid), c); if (r < 0) { free(c); return r; } *ret = c; return 0; }