From: Jan Moskyto Matejka Date: Wed, 12 Jul 2017 11:47:32 +0000 (+0200) Subject: Merge branch 'int-new' into bash-completion X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a109ef6b712bdfb08af9f6d632c2ee29b3369f10;p=thirdparty%2Fbird.git Merge branch 'int-new' into bash-completion --- a109ef6b712bdfb08af9f6d632c2ee29b3369f10 diff --cc client/commands.c index 5ea3f3ff0,fdf2652a0..5709cd444 --- a/client/commands.c +++ b/client/commands.c @@@ -288,9 -229,9 +290,9 @@@ cmd_complete(const char *cmd, int len, /* Find the context */ n = &cmd_root; - while (cmd < fin && n->son) + while (cmd < fin) { - if (isspace(*cmd)) + if (isspace_(*cmd)) { cmd++; continue; diff --cc nest/cmds.c index a36d838c8,2bc672ea2..c4fcebd96 --- a/nest/cmds.c +++ b/nest/cmds.c @@@ -48,74 -46,26 +48,76 @@@ cmd_show_status(void void cmd_show_symbols(struct sym_show_data *sd) { - int pos = 0; - struct symbol *sym = sd->sym; - - if (sym) - cli_msg(1010, "%-8s\t%s", sym->name, cf_symbol_class_name(sym)); + if (sd->sym) + cli_msg(1010, "%-8s\t%s", sd->sym->name, cf_symbol_class_name(sd->sym)); else + { + HASH_WALK(config->sym_hash, next, sym) { - while (sym = cf_walk_symbols(config, sym, &pos)) - { - if (sd->type && (sym->class != sd->type)) - continue; + if (!sym->scope->active) + continue; + + if (sd->type && (sym->class != sd->type)) + continue; - cli_msg(-1010, "%-8s\t%s", sym->name, cf_symbol_class_name(sym)); - } - cli_msg(0, ""); + cli_msg(-1010, "%-8s\t%s", sym->name, cf_symbol_class_name(sym)); } + HASH_WALK_END; + + cli_msg(0, ""); + } } +static int +get_cli_code_for_sym(struct symbol *sym) +{ + if (cf_symbol_is_constant(sym)) + return RC_CONSTANT_NAME; + + if (cf_symbol_is_variable(sym)) + return RC_VARIABLE_NAME; + + switch (sym->class & 0xff) + { + case SYM_PROTO: return RC_PROTOCOL_NAME; + case SYM_TEMPLATE: return RC_TEMPLATE_NAME; + case SYM_FUNCTION: return RC_FUNCTION_NAME; + case SYM_FILTER: return RC_FILTER_NAME; + case SYM_TABLE: return RC_TABLE_NAME; + default: + log(L_ERR "Undefined class %d of %s", sym->class, sym->name); + } + return 0; +} + +/** + * cmd_send_symbols - send all symbols for auto-completion interactive CLI + * + * This function sends all known symbols for auto-completion interactive BIRD's + * CLI. The first symbol is version of BIRD. + */ +void +cmd_send_symbols(void) +{ + int code, pos = 0; + struct symbol *sym = NULL; + + cli_msg(RC_BIRD_VERSION_NUM, "%s", BIRD_VERSION); + + while (sym = cf_walk_symbols(config, sym, &pos)) + { + code = get_cli_code_for_sym(sym); + cli_msg(code, "%s", sym->name); + } + + struct iface *i; + WALK_LIST(i, iface_list) + if (!(i->flags & IF_SHUTDOWN)) + cli_msg(RC_INTERFACE_NAME, "\"%s\"", i->name); + + cli_msg(RC_DUMP_DONE, ""); +} + static void print_size(char *dsc, size_t val) {