int b1_handle_new(B1Peer *peer, uint64_t id, B1Handle **handlep) { _c_cleanup_(b1_handle_unrefp) B1Handle *handle = NULL; assert(peer); assert(handlep); handle = calloc(1, sizeof(*handle)); if (!handle) return -ENOMEM; handle->n_ref = 1; handle->holder = b1_peer_ref(peer); handle->id = id; handle->marked = false; c_rbnode_init(&handle->rb); *handlep = handle; handle = NULL; return 0; }
static int b1_handle_new(B1Peer *peer, B1Handle **handlep) { _c_cleanup_(b1_handle_unrefp) B1Handle *handle = NULL; assert(peer); assert(handlep); handle = calloc(1, sizeof(*handle)); if (!handle) return -ENOMEM; handle->ref = (CRef)C_REF_INIT; handle->holder = b1_peer_ref(peer); handle->id = BUS1_HANDLE_INVALID; handle->marked = false; handle->live = false; c_rbnode_init(&handle->rb); *handlep = handle; handle = NULL; return 0; }
/** * b1_node_new() - create a new node for a peer * @peer: the owning peer * @nodep: pointer to the new node object * * Return: 0 on success, and a negative error code on failure. */ _c_public_ int b1_node_new(B1Peer *peer, B1Node **nodep) { _c_cleanup_(b1_node_freep) B1Node *node = NULL; int r; node = calloc(1, sizeof(*node)); if (!node) return -ENOMEM; node->id = BUS1_HANDLE_INVALID; node->owner = b1_peer_ref(peer); c_rbnode_init(&node->rb_nodes); r = b1_handle_new(peer, &node->handle); if (r < 0) return r; node->handle->node = node; *nodep = node; node = NULL; return 0; }
int b1_node_new_internal(B1Peer *peer, B1Node **nodep, void *userdata, uint64_t id, const char *name) { _c_cleanup_(b1_node_freep) B1Node *node = NULL; size_t n_name; assert(peer); assert(nodep); n_name = name ? strlen(name) + 1 : 0; node = calloc(1, sizeof(*node) + n_name); if (!node) return -ENOMEM; if (name) node->name = memcpy((void*)(node + 1), name, n_name); node->id = id; node->owner = b1_peer_ref(peer); node->userdata = userdata; node->live = false; *nodep = node; node = NULL; return 0; }