chiark / gitweb /
Remove src/hwdb
[elogind.git] / src / import / qcow2-util.c
index c84c6aa0d72b20948df62f4c1ec4a38cd1af0235..fd3cf1b0e3bd5a8943a1d725d2aba7ce49830fb2 100644 (file)
@@ -24,6 +24,7 @@
 #include "util.h"
 #include "sparse-endian.h"
 #include "qcow2-util.h"
+#include "btrfs-util.h"
 
 #define QCOW2_MAGIC 0x514649fb
 
@@ -85,6 +86,11 @@ static int copy_cluster(
                 void *buffer) {
 
         ssize_t l;
+        int r;
+
+        r = btrfs_clone_range(sfd, soffset, dfd, doffset, cluster_size);
+        if (r >= 0)
+                return r;
 
         l = pread(sfd, buffer, cluster_size, soffset);
         if (l < 0)
@@ -171,7 +177,7 @@ static int normalize_offset(
                 uint64_t sz, csize_shift, csize_mask;
 
                 if (!compressed)
-                        return -ENOTSUP;
+                        return -EOPNOTSUPP;
 
                 csize_shift = 64 - 2 - (HEADER_CLUSTER_BITS(header) - 8);
                 csize_mask = (1ULL << (HEADER_CLUSTER_BITS(header) - 8)) - 1;
@@ -210,10 +216,10 @@ static int verify_header(const Header *header) {
 
         if (HEADER_VERSION(header) != 2 &&
             HEADER_VERSION(header) != 3)
-                return -ENOTSUP;
+                return -EOPNOTSUPP;
 
         if (HEADER_CRYPT_METHOD(header) != 0)
-                return -ENOTSUP;
+                return -EOPNOTSUPP;
 
         if (HEADER_CLUSTER_BITS(header) < 9) /* 512K */
                 return -EBADMSG;
@@ -230,7 +236,7 @@ static int verify_header(const Header *header) {
         if (HEADER_VERSION(header) == 3) {
 
                 if (header->incompatible_features != 0)
-                        return -ENOTSUP;
+                        return -EOPNOTSUPP;
 
                 if (HEADER_HEADER_LENGTH(header) < sizeof(Header))
                         return -EBADMSG;