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

Ruslan Kuprieiev kupruser at gmail.com
Fri Nov 15 12:10:52 PST 2013


On 15.11.2013 19:43, Pavel Emelyanov wrote:
> 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.

I've been thinking on it a lot and all my other variants are a lot 
bigger and uglier.

>> +		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