hostapd_cli: Add completion for help command
authorMikael Kanstrup <mikael.kanstrup@sonymobile.com>
Thu, 7 Jul 2016 12:04:33 +0000 (14:04 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 6 Aug 2016 09:18:07 +0000 (12:18 +0300)
Implement command completion support for help command.

Signed-off-by: Mikael Kanstrup <mikael.kanstrup@sonymobile.com>
hostapd/hostapd_cli.c

index 0212335..2a45ca4 100644 (file)
@@ -75,6 +75,7 @@ static int ping_interval = 5;
 static int interactive = 0;
 
 static void print_help(FILE *stream, const char *cmd);
+static char ** list_cmd_list(void);
 
 
 static void usage(void)
@@ -104,6 +105,24 @@ static void usage(void)
 }
 
 
+static int get_cmd_arg_num(const char *str, int pos)
+{
+       int arg = 0, i;
+
+       for (i = 0; i <= pos; i++) {
+               if (str[i] != ' ') {
+                       arg++;
+                       while (i <= pos && str[i] != ' ')
+                               i++;
+               }
+       }
+
+       if (arg > 0)
+               arg--;
+       return arg;
+}
+
+
 static int str_starts(const char *src, const char *match)
 {
        return os_strncmp(src, match, os_strlen(match)) == 0;
@@ -754,6 +773,21 @@ static int hostapd_cli_cmd_help(struct wpa_ctrl *ctrl, int argc, char *argv[])
 }
 
 
+static char ** hostapd_cli_complete_help(const char *str, int pos)
+{
+       int arg = get_cmd_arg_num(str, pos);
+       char **res = NULL;
+
+       switch (arg) {
+       case 1:
+               res = list_cmd_list();
+               break;
+       }
+
+       return res;
+}
+
+
 static int hostapd_cli_cmd_license(struct wpa_ctrl *ctrl, int argc,
                                   char *argv[])
 {
@@ -1259,7 +1293,7 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = {
        { "bss_tm_req", hostapd_cli_cmd_bss_tm_req, NULL, NULL },
        { "get_config", hostapd_cli_cmd_get_config, NULL,
          "= show current configuration" },
-       { "help", hostapd_cli_cmd_help, NULL,
+       { "help", hostapd_cli_cmd_help, hostapd_cli_complete_help,
          "= show this usage help" },
        { "interface", hostapd_cli_cmd_interface, NULL,
          "[ifname] = show interfaces/select interface" },