diff options
author | あく <alleteam@gmail.com> | 2021-07-29 18:27:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-29 18:27:06 +0300 |
commit | 4c85bfedca4d19fe0b4e84897c96d1ddf463ee37 (patch) | |
tree | f78cdfc57a02b389ba42c5e28b3bb27da2b8c78a /applications/cli | |
parent | 12113b480d8c3775b97fc8228dad8627c2c615c8 (diff) |
[FL-1620] Cli command list crash fix. Correct name validation in scripts. (#613)
* Scripts: fix incorrect name validation regexp.
* Cli: fix command list iteration.
Diffstat (limited to 'applications/cli')
-rw-r--r-- | applications/cli/cli_commands.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/applications/cli/cli_commands.c b/applications/cli/cli_commands.c index 1ee535b5..d23a8c59 100644 --- a/applications/cli/cli_commands.c +++ b/applications/cli/cli_commands.c @@ -94,23 +94,30 @@ void cli_command_help(Cli* cli, string_t args, void* context) { (void)args; printf("Commands we have:"); - // Get the middle element - CliCommandTree_it_t it_mid; - uint8_t cmd_num = CliCommandTree_size(cli->commands); - uint8_t i = cmd_num / 2 + cmd_num % 2; - for(CliCommandTree_it(it_mid, cli->commands); i; --i, CliCommandTree_next(it_mid)) - ; + // Command count + const size_t commands_count = CliCommandTree_size(cli->commands); + const size_t commands_count_mid = commands_count / 2 + commands_count % 2; + // Use 2 iterators from start and middle to show 2 columns - CliCommandTree_it_t it_i; - CliCommandTree_it_t it_j; - for(CliCommandTree_it(it_i, cli->commands), CliCommandTree_it_set(it_j, it_mid); - !CliCommandTree_it_equal_p(it_i, it_mid); - CliCommandTree_next(it_i), CliCommandTree_next(it_j)) { - CliCommandTree_itref_t* ref = CliCommandTree_ref(it_i); + CliCommandTree_it_t it_left; + CliCommandTree_it(it_left, cli->commands); + CliCommandTree_it_t it_right; + CliCommandTree_it(it_right, cli->commands); + for(size_t i = 0; i < commands_count_mid; i++) CliCommandTree_next(it_right); + + // Iterate throw tree + for(size_t i = 0; i < commands_count_mid; i++) { printf("\r\n"); - printf("%-30s", string_get_cstr(ref->key_ptr[0])); - ref = CliCommandTree_ref(it_j); - printf(string_get_cstr(ref->key_ptr[0])); + // Left Column + if(!CliCommandTree_end_p(it_left)) { + printf("%-30s", string_get_cstr(*CliCommandTree_ref(it_left)->key_ptr)); + CliCommandTree_next(it_left); + } + // Right Column + if(!CliCommandTree_end_p(it_right)) { + printf(string_get_cstr(*CliCommandTree_ref(it_right)->key_ptr)); + CliCommandTree_next(it_right); + } }; if(string_size(args) > 0) { |