char * noit_console_check_opts(noit_console_closure_t ncct, noit_console_state_stack_t *stack, noit_console_state_t *dstate, int argc, char **argv, int idx) { noit_hash_iter iter = NOIT_HASH_ITER_ZERO; uuid_t key_id; int klen, i = 0; if(argc == 1) { void *vcheck; while(noit_hash_next(&polls, &iter, (const char **)key_id, &klen, &vcheck)) { char out[512]; char uuid_str[37]; noit_check_t *check = (noit_check_t *)vcheck; snprintf(out, sizeof(out), "%s`%s", check->target, check->name); uuid_unparse_lower(check->checkid, uuid_str); if(!strncmp(out, argv[0], strlen(argv[0]))) { if(idx == i) return strdup(out); i++; } if(!strncmp(uuid_str, argv[0], strlen(argv[0]))) { if(idx == i) return strdup(uuid_str); i++; } } } if(argc == 2) { return noit_console_opt_delegate(ncct, stack, dstate, argc-1, argv+1, idx); } return NULL; }
static char * noitedit_completion_function(EditLine *el, const char *text, int state) { noit_console_closure_t ncct; const LineInfo *li; char **cmds, *curstr; int len, cnt = 32; li = el_line(el); len = li->cursor - li->buffer; curstr = alloca(len + 1); memcpy(curstr, li->buffer, len); curstr[len] = '\0'; cmds = alloca(32 * sizeof(*cmds)); (void) noit_tokenize(curstr, cmds, &cnt); el_get(el, EL_USERDATA, (void *)&ncct); if(!strlen(text)) { cmds[cnt++] = ""; } if(cnt == 32) return NULL; return noit_console_opt_delegate(ncct, ncct->state_stack, ncct->state_stack->state, cnt, cmds, state); }
char * noit_console_conf_check_opts(noit_console_closure_t ncct, noit_console_state_stack_t *stack, noit_console_state_t *dstate, int argc, char **argv, int idx) { noit_hash_iter iter = NOIT_HASH_ITER_ZERO; uuid_t key_id; int klen, i = 0; void *vcheck; if(argc == 1) { if(!strncmp("new", argv[0], strlen(argv[0]))) { if(idx == i) return strdup("new"); i++; } while(noit_hash_next(&polls, &iter, (const char **)key_id, &klen, &vcheck)) { noit_check_t *check = (noit_check_t *)vcheck; char out[512]; char uuid_str[37]; snprintf(out, sizeof(out), "%s`%s", check->target, check->name); uuid_unparse_lower(check->checkid, uuid_str); if(!strncmp(out, argv[0], strlen(argv[0]))) { if(idx == i) return strdup(out); i++; } if(!strncmp(uuid_str, argv[0], strlen(argv[0]))) { if(idx == i) return strdup(uuid_str); i++; } } } if(argc == 2) { cmd_info_t *cmd; if(!strcmp("new", argv[0])) return NULL; cmd = noit_skiplist_find(&dstate->cmds, "attribute", NULL); if(!cmd) return NULL; return noit_console_opt_delegate(ncct, stack, cmd->dstate, argc-1, argv+1, idx); } return NULL; }