[CRIU] [PATCH 4/5] crtools: chdir to work directory

Pavel Emelyanov xemul at parallels.com
Fri Nov 15 07:43:50 PST 2013


On 11/15/2013 11:04 PM, Ruslan Kuprieiev wrote:
> 
> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> ---
>  crtools.c | 32 +++++++++++++++++++++-----------
>  1 file changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/crtools.c b/crtools.c
> index d8de2ef..a058b46 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,10 @@ 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);
> -				return -1;
> -			}
> +			imgs_dir = optarg;
>  			break;
>  		case 'W':
> +			work_dir = optarg;
>  			break;
>  		case 'o':
>  			opts.output = optarg;
> @@ -283,6 +282,9 @@ int main(int argc, char *argv[])
>  		}
>  	}
>  
> +	if (work_dir == NULL)
> +		work_dir = imgs_dir;
> +
>  	log_set_loglevel(log_level);
>  
>  	if (log_init(opts.output))
> @@ -291,15 +293,23 @@ int main(int argc, char *argv[])
>  	if (opts.img_parent)
>  		pr_info("Will do snapshot from %s\n", opts.img_parent);
>  
> -	ret = open_image_dir(".");
> -	if (ret < 0) {
> -		pr_perror("Can't open current directory");
> -		return -1;
> -	}
> -
>  	if (optind >= argc)
>  		goto usage;
>  
> +	/* We must not open imgs dir, if service is called */
> +	if (strcmp(argv[optind], "service")) {

This is really ugly. Only one cmd string evaluation in code please.

> +		ret = open_image_dir(imgs_dir);
> +		if (ret < 0) {
> +			pr_perror("Can't open imgs directory");
> +			return -1;
> +		}
> +	}
> +
> +	if (chdir(work_dir)) {
> +		pr_perror("Can't change directory to %s", work_dir);
> +		return -1;
> +	}
> +
>  	if (!strcmp(argv[optind], "dump")) {
>  		if (!tree_id)
>  			goto opt_pid_missing;
> 




More information about the CRIU mailing list