/* 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; }
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; }