Signed-off-by: Juergen Borleis <[email protected]>
---
 include/image-sparse.h |  1 +
 lib/image-sparse.c     | 17 +++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/image-sparse.h b/include/image-sparse.h
index 6bff844..d969ca1 100644
--- a/include/image-sparse.h
+++ b/include/image-sparse.h
@@ -59,6 +59,7 @@ static inline int is_sparse_image(const void *buf)
 struct sparse_image_ctx;
 
 struct sparse_image_ctx *sparse_image_open(const char *path);
+struct sparse_image_ctx *sparse_image_fd(int infd);
 int sparse_image_read(struct sparse_image_ctx *si, void *buf,
                      loff_t *pos, size_t len, size_t *retlen);
 void sparse_image_close(struct sparse_image_ctx *si);
diff --git a/lib/image-sparse.c b/lib/image-sparse.c
index eb5242e..b686d25 100644
--- a/lib/image-sparse.c
+++ b/lib/image-sparse.c
@@ -146,7 +146,7 @@ loff_t sparse_image_size(struct sparse_image_ctx *si)
        return (loff_t)si->sparse.blk_sz * si->sparse.total_blks;
 }
 
-struct sparse_image_ctx *sparse_image_open(const char *path)
+struct sparse_image_ctx *sparse_image_fd(int infd)
 {
        struct sparse_image_ctx *si;
        loff_t offs;
@@ -154,11 +154,7 @@ struct sparse_image_ctx *sparse_image_open(const char 
*path)
 
        si = xzalloc(sizeof(*si));
 
-       si->fd = open(path, O_RDONLY);
-       if (si->fd < 0) {
-               ret = -errno;
-               goto out;
-       }
+       si->fd = infd;
 
        /* Read and skip over sparse image header */
        read(si->fd, &si->sparse, sizeof(struct sparse_header));
@@ -186,6 +182,15 @@ struct sparse_image_ctx *sparse_image_open(const char 
*path)
        return ERR_PTR(ret);
 }
 
+struct sparse_image_ctx *sparse_image_open(const char *path)
+{
+       int fd = open(path, O_RDONLY);
+       if (fd < 0)
+               return ERR_PTR(-errno);
+
+       return sparse_image_fd(fd);
+}
+
 int sparse_image_read(struct sparse_image_ctx *si, void *buf, loff_t *pos,
                      size_t len, size_t *retlen)
 {
-- 
2.30.2


Reply via email to