[CRIU] [PATCH 4/5] add init_work_dir
Ruslan Kuprieiev
kupruser at gmail.com
Tue Nov 12 13:43:00 PST 2013
Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
---
cr-service.c | 5 +++++
crtools.c | 10 ++++++++++
include/util.h | 2 ++
util.c | 25 +++++++++++++++++++++++++
4 files changed, 42 insertions(+)
diff --git a/cr-service.c b/cr-service.c
index 92ccd66..58f765a 100644
--- a/cr-service.c
+++ b/cr-service.c
@@ -127,6 +127,11 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
log_closedir();
/* initiate log file in imgs dir */
+ if (init_work_dir(NULL) < 0) {
+ pr_perror("Can't set work directory");
+ return -1;
+ }
+
if (req->log_file)
opts.output = req->log_file;
else
diff --git a/crtools.c b/crtools.c
index b9313b1..136d3fc 100644
--- a/crtools.c
+++ b/crtools.c
@@ -79,6 +79,7 @@ int main(int argc, char *argv[])
int opt, idx;
int log_level = 0;
char *imgs_dir = ".";
+ char *work_dir = NULL;
BUILD_BUG_ON(PAGE_SIZE != PAGE_IMAGE_SIZE);
@@ -167,6 +168,7 @@ int main(int argc, char *argv[])
imgs_dir = optarg;
break;
case 'W':
+ work_dir = optarg;
break;
case 'o':
opts.output = optarg;
@@ -280,6 +282,14 @@ int main(int argc, char *argv[])
}
}
+ if (!work_dir)
+ work_dir = imgs_dir;
+
+ if (init_work_dir(work_dir) < 0) {
+ pr_perror("Can't initiate work directory");
+ return -1;
+ }
+
if (chdir(imgs_dir)) {
pr_perror("Can't change directory to %s", optarg);
return -1;
diff --git a/include/util.h b/include/util.h
index 72a79e9..5bc9557 100644
--- a/include/util.h
+++ b/include/util.h
@@ -289,4 +289,6 @@ extern int read_fd_link(int lfd, char *buf, size_t size);
#define USEC_PER_SEC 1000000L
#define NSEC_PER_SEC 1000000000L
+extern int init_work_dir(char *work_dir);
+
#endif /* __CR_UTIL_H__ */
diff --git a/util.c b/util.c
index 0b10f0d..23a3148 100644
--- a/util.c
+++ b/util.c
@@ -571,3 +571,28 @@ out:
return ret;
}
+
+int init_work_dir(char *work_dir)
+{
+ int dfd, ret;
+
+ if (work_dir) {
+ dfd = open(work_dir, O_RDONLY);
+ if (dfd < 0) {
+ pr_perror("Can't open work directory %s", work_dir);
+ return -1;
+ }
+ } else {
+ dfd = open(".", O_RDONLY);
+ if (dfd < 0) {
+ pr_perror("Can't open current directory %s", work_dir);
+ return -1;
+ }
+ }
+
+ ret = install_service_fd(WORK_DIR_FD_OFF, dfd);
+
+ close(dfd);
+
+ return ret;
+}
--
1.8.1.2
More information about the CRIU
mailing list