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

Ruslan Kuprieiev kupruser at gmail.com
Fri Nov 15 13:21:54 PST 2013


On 15.11.2013 21:08, Pavel Emelyanov wrote:
> 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();
>
> ?

How can i open images dir from work_dir, if i get relative imgs_dir path 
and i can't use realpath?

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