[CRIU] [PATCH 1/2] crtools/usage: error on excessive subcommands

Dmitry Safonov dsafonov at virtuozzo.com
Mon Jan 9 08:59:23 PST 2017


Before:
  [~]# criu check lazy_pages
  Looks good.
  [~]# criu check --feature lazy_pages
  Error (criu/kerndat.c:588): Lazy pages are not available
After:
  [~]# criu check lazy_pages
  Error: excessive parameters for command check
  ...skipped usage() output...

Just a little improvement, not to mislead anyone.

Cc: Kir Kolyshkin <kir at openvz.org>
Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
---
 criu/crtools.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/criu/crtools.c b/criu/crtools.c
index 06b2fa781892..ea470e4a75f8 100644
--- a/criu/crtools.c
+++ b/criu/crtools.c
@@ -214,6 +214,7 @@ int main(int argc, char *argv[], char *envp[])
 	int ret = -1;
 	bool usage_error = true;
 	bool has_exec_cmd = false;
+	bool has_sub_command;
 	int opt, idx;
 	int log_level = LOG_UNSET;
 	char *imgs_dir = ".";
@@ -649,8 +650,10 @@ int main(int argc, char *argv[], char *envp[])
 		goto usage;
 	}
 
+	has_sub_command = (argc - optind) > 1;
+
 	if (has_exec_cmd) {
-		if (argc - optind <= 1) {
+		if (!has_sub_command) {
 			pr_msg("Error: --exec-cmd requires a command\n");
 			goto usage;
 		}
@@ -670,6 +673,13 @@ int main(int argc, char *argv[], char *envp[])
 			return 1;
 		memcpy(opts.exec_cmd, &argv[optind + 1], (argc - optind - 1) * sizeof(char *));
 		opts.exec_cmd[argc - optind - 1] = NULL;
+	} else {
+		/* No subcommands except for cpuinfo and restore --exec-cmd */
+		if (strcmp(argv[optind], "cpuinfo") && has_sub_command) {
+			pr_msg("Error: excessive parameter%s for command %s\n",
+				(argc - optind) > 2 ? "s" : "", argv[optind]);
+			goto usage;
+		}
 	}
 
 	/* We must not open imgs dir, if service is called */
@@ -781,8 +791,10 @@ int main(int argc, char *argv[], char *envp[])
 		return cr_dedup() != 0;
 
 	if (!strcmp(argv[optind], "cpuinfo")) {
-		if (!argv[optind + 1])
+		if (!argv[optind + 1]) {
+			pr_msg("Error: cpuinfo requires an action: dump or check\n");
 			goto usage;
+		}
 		if (!strcmp(argv[optind + 1], "dump"))
 			return cpuinfo_dump();
 		else if (!strcmp(argv[optind + 1], "check"))
-- 
2.11.0



More information about the CRIU mailing list