[CRIU] [RFC] crtools: flush early log using destructor

Radostin Stoyanov rstoyanov1 at gmail.com
Wed Sep 11 17:38:14 MSK 2019


Print error messages to stderr (instead of stdout) when the early log
is not initialised.

This patch also removes changes introduced with commit 970198a

Suggested-by: Dmitry Safonov <0x7f454c46 at gmail.com>
Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
---
 criu/crtools.c    | 31 ++++++++++++++++++-------------
 criu/proc_parse.c |  2 +-
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/criu/crtools.c b/criu/crtools.c
index 97a6d6d6c..9db0bc486 100644
--- a/criu/crtools.c
+++ b/criu/crtools.c
@@ -48,6 +48,13 @@
 #include "sysctl.h"
 #include "img-remote.h"

+void flush_early_log_to_stderr() __attribute__((destructor));
+
+void flush_early_log_to_stderr(void)
+{
+	flush_early_log_buffer(STDERR_FILENO);
+}
+
 int main(int argc, char *argv[], char *envp[])
 {
 	int ret = -1;
@@ -96,10 +103,8 @@ int main(int argc, char *argv[], char *envp[])
 		return cr_service_work(atoi(argv[2]));
 	}

-	if (check_options()) {
-		flush_early_log_buffer(STDERR_FILENO);
+	if (check_options())
 		return 1;
-	}

 	if (opts.imgs_dir == NULL)
 		SET_CHAR_OPTS(imgs_dir, ".");
@@ -108,7 +113,7 @@ int main(int argc, char *argv[], char *envp[])
 		SET_CHAR_OPTS(work_dir, opts.imgs_dir);

 	if (optind >= argc) {
-		pr_msg("Error: command is required\n");
+		pr_err("command is required\n");
 		goto usage;
 	}

@@ -116,17 +121,17 @@ int main(int argc, char *argv[], char *envp[])

 	if (has_exec_cmd) {
 		if (!has_sub_command) {
-			pr_msg("Error: --exec-cmd requires a command\n");
+			pr_err("--exec-cmd requires a command\n");
 			goto usage;
 		}

 		if (strcmp(argv[optind], "restore")) {
-			pr_msg("Error: --exec-cmd is available for the restore command only\n");
+			pr_err("--exec-cmd is available for the restore command only\n");
 			goto usage;
 		}

 		if (opts.restore_detach) {
-			pr_msg("Error: --restore-detached and --exec-cmd cannot be used together\n");
+			pr_err("--restore-detached and --exec-cmd cannot be used together\n");
 			goto usage;
 		}

@@ -138,7 +143,7 @@ int main(int argc, char *argv[], char *envp[])
 	} 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",
+			pr_err("excessive parameter%s for command %s\n",
 				(argc - optind) > 2 ? "s" : "", argv[optind]);
 			goto usage;
 		}
@@ -237,7 +242,7 @@ int main(int argc, char *argv[], char *envp[])

 	if (!strcmp(argv[optind], "image-proxy")) {
 		if (!opts.addr) {
-			pr_msg("Error: address not specified\n");
+			pr_err("address not specified\n");
 			return 1;
 		}
 		if (!opts.port)
@@ -253,7 +258,7 @@ int main(int argc, char *argv[], char *envp[])

 	if (!strcmp(argv[optind], "cpuinfo")) {
 		if (!argv[optind + 1]) {
-			pr_msg("Error: cpuinfo requires an action: dump or check\n");
+			pr_err("cpuinfo requires an action: dump or check\n");
 			goto usage;
 		}
 		if (!strcmp(argv[optind + 1], "dump"))
@@ -273,7 +278,7 @@ int main(int argc, char *argv[], char *envp[])
 		return -1;
 	}

-	pr_msg("Error: unknown command: %s\n", argv[optind]);
+	pr_err("unknown command: %s\n", argv[optind]);
 usage:
 	pr_msg("\n"
 "Usage:\n"
@@ -469,10 +474,10 @@ usage:
 	return 0;

 opt_port_missing:
-	pr_msg("Error: port not specified\n");
+	pr_err("port not specified\n");
 	return 1;

 opt_pid_missing:
-	pr_msg("Error: pid not specified\n");
+	pr_err("pid not specified\n");
 	return 1;
 }
diff --git a/criu/proc_parse.c b/criu/proc_parse.c
index 0e8b6f209..97f82ee01 100644
--- a/criu/proc_parse.c
+++ b/criu/proc_parse.c
@@ -932,7 +932,7 @@ int prepare_loginuid(unsigned int value, unsigned int loglevel)

 	if (write(fd, buf, 11) < 0) {
 		print_on_level(loglevel,
-			"Write %s to /proc/self/loginuid failed: %s",
+			"Write %s to /proc/self/loginuid failed: %s\n",
 			buf, strerror(errno));
 		ret = -1;
 	}
--
2.21.0



More information about the CRIU mailing list