Meaningful non-interactive wpa_cli exit code

Daniel Drake ddrake
Wed Jul 18 12:10:24 PDT 2007


When you run wpa_cli with an unrecognised command in non-interactive
mode, e.g. "wpa_cli asdf", you get a zero exit code.

This patch makes it nonzero for unrecognised commands like this, to
allow easy detection of failure.

One use of this: It will be possible to easily detect whether wpa_cli
supports the 'reconnect' command I proposed in another recent patch, by
detecting the bad exit code (and then a fallback on reassociate can be
implemented)

---
 wpa_supplicant/wpa_cli.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
index 4779a4c..f862aad 100644
--- a/wpa_supplicant/wpa_cli.c
+++ b/wpa_supplicant/wpa_cli.c
@@ -1073,10 +1073,11 @@ static struct wpa_cli_cmd wpa_cli_commands[] = {
 };
 
 
-static void wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[])
+static int wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[])
 {
 	struct wpa_cli_cmd *cmd, *match = NULL;
 	int count;
+	int ret = 0;
 
 	count = 0;
 	cmd = wpa_cli_commands;
@@ -1107,9 +1108,12 @@ static void wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[])
 		printf("\n");
 	} else if (count == 0) {
 		printf("Unknown command '%s'\n", argv[0]);
+		ret = 1;
 	} else {
 		match->handler(ctrl, argc - 1, &argv[1]);
 	}
+
+	return ret;
 }
 
 
@@ -1564,6 +1568,7 @@ int main(int argc, char *argv[])
 	int warning_displayed = 0;
 	int c;
 	int daemonize = 0;
+	int ret = 0;
 	const char *global = NULL;
 
 	if (os_program_init())
@@ -1675,12 +1680,12 @@ int main(int argc, char *argv[])
 	else if (action_file)
 		wpa_cli_action(ctrl_conn);
 	else
-		wpa_request(ctrl_conn, argc - optind, &argv[optind]);
+		ret = wpa_request(ctrl_conn, argc - optind, &argv[optind]);
 
 	os_free(ctrl_ifname);
 	wpa_cli_cleanup();
 
-	return 0;
+	return ret;
 }
 
 #else /* CONFIG_CTRL_IFACE */
-- 
1.5.2.2





More information about the Hostap mailing list