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

Pavel Emelyanov xemul at parallels.com
Fri Nov 15 09:08:07 PST 2013


On 11/16/2013 12:10 AM, Ruslan Kuprieiev wrote:
> 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.

Why not like this


chdir(work_dir);

if (cmd == service)
	return cr_service();

open_images_dir();

if (cmd == dump)
	return cr_dump();
if (cmd == restore)
	return cr_restore();

?

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