changeset 1171:c745f720ae2e

Fix flags after the hostname
author Matt Johnston <matt@ucc.asn.au>
date Mon, 23 Nov 2015 22:47:43 +0800
parents ff9bd50f1457
children a44747e5a05a
files cli-runopts.c
diffstat 1 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/cli-runopts.c	Mon Nov 23 22:28:56 2015 +0800
+++ b/cli-runopts.c	Mon Nov 23 22:47:43 2015 +0800
@@ -177,7 +177,20 @@
 
 	fill_own_user();
 
-	for (i = 1; i < (unsigned int)argc && argv[i][0] == '-'; i++) {
+	for (i = 1; i < (unsigned int)argc; i++) {
+		/* Handle non-flag arguments such as hostname or commands for the remote host */
+		if (argv[i][0] != '-')
+		{
+			if (host_arg == NULL) {
+				host_arg = argv[i];
+				continue;
+			}
+			/* Commands to pass to the remote host. No more flag handling,
+			commands are consumed below */
+			break;
+		}
+
+		/* Begins with '-' */
 		opt = OPT_OTHER;
 		for (j = 1; (c = argv[i][j]) != '\0' && !next && opt == OPT_OTHER; j++) {
 			switch (c) {
@@ -348,11 +361,10 @@
 	/* Done with options/flags; now handle the hostname (which may not
 	 * start with a hyphen) and optional command */
 
-	if (i >= (unsigned int)argc) { /* missing hostname */
+	if (host_arg == NULL) { /* missing hostname */
 		printhelp();
 		exit(EXIT_FAILURE);
 	}
-	host_arg = argv[i++];
 	TRACE(("host is: %s", host_arg))
 
 	if (i < (unsigned int)argc) {