trienode *trsearch(trienode *root, key *target) { int i; printf("search for: "); show_target(target); for (i = 0; i < MAXLENGTH && root; i++) { if (target->kval[i] == INVALID_KEY) break; else root = root->branch[target->kval[i]]; } if ((root && !root->ref) || (!root)) { printf("not found => "); show_target(target); printf("\n"); } else printf("found => %s\n", root->ref->name); return root; }
STATIC int do_list_targets(int argc, char **argv, iscsid_list_kind_t kind) { iscsid_get_list_req_t lst; iscsid_response_t *rsp; iscsid_get_list_rsp_t *list; unsigned i; check_extra_args(argc, argv); /* get the list of targets */ lst.list_kind = kind; send_request(ISCSID_GET_LIST, sizeof(lst), &lst); rsp = get_response(TRUE); if (rsp->status) { status_error(rsp->status); } list = (iscsid_get_list_rsp_t *)(void *)rsp->parameter; /* display all targets */ for (i = 0; i < list->num_entries; i++) { show_target(list->id[i], kind); } free_response(rsp); return 0; }
trienode *trdelete(trienode *root, key *target) { int i; printf("delete: "); show_target(target); for (i = 0; i < MAXLENGTH && root; i++) { if (target->kval[i] == INVALID_KEY) break; else root = root->branch[target->kval[i]]; } if (root && !root->ref) { printf("null root\n"); return NULL; } else if (!root) { printf("not found: "); show_target(target); printf("\n"); } else { printf("=> %s\n", root->ref->name); free(root->ref); root->ref = NULL; } return root; }
trienode *trinsert(trienode *root, key *newkey, entry *newentry) { int i; trienode *saveroot; printf("inserting: "); show_target(newkey); printf(" = %s\n", newentry->name); if (!root) root = trcreatenode(); saveroot = root; for (i = 0; i < MAXLENGTH; i++) { if (newkey->kval[i] == INVALID_KEY) break; else { if (!root->branch[newkey->kval[i]]) /* make a new node on root for newkey */ root->branch[newkey->kval[i]] = trcreatenode(); root = root->branch[newkey->kval[i]]; /* move down appropriate branch */ } } /* at this point, we have tested for all characters of newkey */ if (root->ref != NULL) { printf("warning: tried to insert a duplicate key..."); show_target(newkey); printf("\n"); } else root->ref = newentry; return saveroot; }