[CRIU] [PATCH 4/N] crtools: resolve work_dir and imgs_dir path to absolute
Pavel Emelyanov
xemul at parallels.com
Fri Nov 15 05:46:40 PST 2013
On 11/15/2013 05:33 AM, Ruslan Kuprieiev wrote:
> Lets resolve paths to not depend on current location.
>
> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> ---
> crtools.c | 45 +++++++++++++++++++++++++++++++--------------
> 1 file changed, 31 insertions(+), 14 deletions(-)
>
> diff --git a/crtools.c b/crtools.c
> index d8de2ef..7eb9501 100644
> --- a/crtools.c
> +++ b/crtools.c
> @@ -78,6 +78,8 @@ int main(int argc, char *argv[])
> int ret = -1;
> int opt, idx;
> int log_level = 0;
> + char *imgs_dir = ".";
> + char *work_dir = NULL;
>
> BUILD_BUG_ON(PAGE_SIZE != PAGE_IMAGE_SIZE);
>
> @@ -163,13 +165,20 @@ int main(int argc, char *argv[])
> opts.restore_detach = true;
> break;
> case 'D':
> - if (chdir(optarg)) {
> - pr_perror("Can't change directory to %s",
> - optarg);
> + imgs_dir = xmalloc(PATH_MAX);
> + imgs_dir = realpath(optarg, imgs_dir);
NAK. Image dir should be passed into open_image_dir() as is.
> + if (!imgs_dir) {
> + pr_perror("Bad images directory path");
> return -1;
> }
> break;
> case 'W':
> + work_dir = xmalloc(PATH_MAX);
> + work_dir = realpath(optarg, work_dir);
Same for work dir -- we should chrdir into what user gave us, not
to somehow converted path.
> + if (!work_dir) {
> + pr_perror("Bad work directory path");
> + return -1;
> + }
> break;
> case 'o':
> opts.output = optarg;
> @@ -283,23 +292,37 @@ int main(int argc, char *argv[])
> }
> }
>
> + if (!work_dir)
> + work_dir = imgs_dir;
> +
> + if (chdir(work_dir)) {
> + pr_perror("Can't change directory to %s", work_dir);
> + return -1;
> + }
> +
> log_set_loglevel(log_level);
>
> if (log_init(opts.output))
> return -1;
>
> + if (optind >= argc)
> + goto usage;
> +
> + if (!strcmp(argv[optind], "page-server"))
> + return cr_page_server(opts.restore_detach);
Huh? Page server needs image dir to work on.
> +
> + if (!strcmp(argv[optind], "service"))
> + return cr_service(opts.restore_detach);
> +
> if (opts.img_parent)
> pr_info("Will do snapshot from %s\n", opts.img_parent);
>
> - ret = open_image_dir(".");
> + ret = open_image_dir(imgs_dir);
> if (ret < 0) {
> - pr_perror("Can't open current directory");
> + pr_perror("Can't open images directory");
> return -1;
> }
>
> - if (optind >= argc)
> - goto usage;
> -
> if (!strcmp(argv[optind], "dump")) {
> if (!tree_id)
> goto opt_pid_missing;
> @@ -343,12 +366,6 @@ int main(int argc, char *argv[])
> return cr_exec(pid, argv + optind + 1);
> }
>
> - if (!strcmp(argv[optind], "page-server"))
> - return cr_page_server(opts.restore_detach);
> -
> - if (!strcmp(argv[optind], "service"))
> - return cr_service(opts.restore_detach);
> -
> pr_msg("Unknown command \"%s\"\n", argv[optind]);
> usage:
> pr_msg("\n"
>
More information about the CRIU
mailing list