diff mbox

[4/9] hostapd_cli: Add completion for help command

Message ID 20160707120438.29740-5-mikael.kanstrup@sonymobile.com
State Accepted
Headers show

Commit Message

Mikael Kanstrup July 7, 2016, 12:04 p.m. UTC
Implement command completion support for help command.

Signed-off-by: Mikael Kanstrup <mikael.kanstrup@sonymobile.com>
---
 hostapd/hostapd_cli.c | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
index 37ed449..55f511a 100644
--- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c
@@ -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)
 {
@@ -103,6 +104,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;
@@ -753,6 +772,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[])
 {
@@ -1257,7 +1291,7 @@  static const struct hostapd_cli_cmd hostapd_cli_commands[] = {
 	  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" },