[CRIU] [PATCH 1/2] Add test_image_at()

Kirill Tkhai ktkhai at odin.com
Fri Oct 23 08:48:58 PDT 2015


Add a helper to check if a image file exists in a dump.
The helper is simple and may be overloaded in the future,
if it's necessary.

It will be used in next patch.

Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
---
 image.c         |   21 +++++++++++++++++++++
 include/image.h |    2 ++
 2 files changed, 23 insertions(+)

diff --git a/image.c b/image.c
index dc9d6a1..faf9703 100644
--- a/image.c
+++ b/image.c
@@ -1,3 +1,4 @@
+#include <sys/stat.h>
 #include <unistd.h>
 #include <stdarg.h>
 #include <fcntl.h>
@@ -259,6 +260,26 @@ struct cr_img *open_image_at(int dfd, int type, unsigned long flags, ...)
 	return img;
 }
 
+/* Test if image file exists */
+bool test_image_at(int dfd, int type, ...)
+{
+	char path[PATH_MAX];
+	struct stat buf;
+	va_list args;
+
+	if (dfd == -1)
+		dfd = get_service_fd(IMG_FD_OFF);
+
+	va_start(args, type);
+	vsnprintf(path, PATH_MAX, imgset_template[type].fmt, args);
+	va_end(args);
+
+	if (fstatat(dfd, path, &buf, 0) < 0)
+		return false;
+
+	return true;
+}
+
 static inline u32 head_magic(int oflags)
 {
 	return oflags & O_SERVICE ? IMG_SERVICE_MAGIC : IMG_COMMON_MAGIC;
diff --git a/include/image.h b/include/image.h
index 305febf..fa97ff3 100644
--- a/include/image.h
+++ b/include/image.h
@@ -170,6 +170,8 @@ extern void close_image_dir(void);
 
 extern struct cr_img *open_image_at(int dfd, int type, unsigned long flags, ...);
 #define open_image(typ, flags, ...) open_image_at(-1, typ, flags, ##__VA_ARGS__)
+extern bool test_image_at(int dfd, int type, ...);
+#define test_image(typ, ...) test_image_at(-1, typ, ##__VA_ARGS__)
 extern int open_image_lazy(struct cr_img *img);
 extern struct cr_img *open_pages_image(unsigned long flags, struct cr_img *pmi);
 extern struct cr_img *open_pages_image_at(int dfd, unsigned long flags, struct cr_img *pmi);



More information about the CRIU mailing list