Esempio n. 1
0
/* caller can be NULL or a dummy root for head of chain */
int knode_link_add(knode_s *unode, knode_s *dnode, void *link_dat)
{
	int i;
	dstr_node_s *tmp;

	if (!unode || !dnode)
		return -1;

	for (i = 0; i < unode->dstr.cnt; i++) {
		tmp = &unode->dstr.arr[i];
		if (tmp->node == dnode) {
			kerror("knode_link_add: %s already there\n",
						dnode->name);
			return 0;
		}
	}
	for (i = 0; i < unode->dstr.cnt; i++)
		if (!unode->dstr.arr[i].node) {
			unode->dstr.arr[i].node = dnode;
			unode->dstr.arr[i].link_dat = link_dat;
			return 0;
		}

	ARR_INC(1, unode->dstr.arr, unode->dstr.cnt, dstr_node_s);
	unode->dstr.arr[i].node = dnode;
	unode->dstr.arr[i].link_dat = link_dat;

	return 0;
}
Esempio n. 2
0
static int rpc_client_wch_add(rpc_client_s *c, char *path, void *wch)
{
	int i;
	const char *tmp;

	for (i = 0; i < c->opts.cnt; i++) {
		tmp = c->opts.arr[i].path;
		if (tmp && (0 == strcmp(tmp, path))) {
			kerror("%s already\n", path);
			return -1;
		}
	}

	for (i = 0; i < c->opts.cnt; i++)
		if (!c->opts.arr[i].path) {
			c->opts.arr[i].path = kstr_dup(path);
			c->opts.arr[i].wch = wch;
			return 0;
		}

	ARR_INC(2, c->opts.arr, c->opts.cnt, rpc_wch_s);
	c->opts.arr[i].path = kstr_dup(path);
	c->opts.arr[i].wch = wch;

	return 0;
}