]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: (promise raid) cleanup code
authorKarel Zak <kzak@redhat.com>
Tue, 22 Sep 2015 09:14:31 +0000 (11:14 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 24 Sep 2015 09:10:09 +0000 (11:10 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libblkid/src/superblocks/promise_raid.c

index 678460a43b8dcf27769a62803f9575b9ca136a1b..75f3a20f105e3cd2ae1b0a1be3d0661c6140da06 100644 (file)
@@ -27,21 +27,27 @@ struct promise_metadata {
 static int probe_pdcraid(blkid_probe pr,
                const struct blkid_idmag *mag __attribute__((__unused__)))
 {
-       unsigned int i;
+       size_t i;
        static unsigned int sectors[] = {
-         63, 255, 256, 16, 399, 591, 675, 735, 911, 974, 991, 951, 3087, 0
+         63, 255, 256, 16, 399, 591, 675, 735, 911, 974, 991, 951, 3087
        };
+       uint64_t nsectors;
 
        if (pr->size < 0x40000)
                return 1;
        if (!S_ISREG(pr->mode) && !blkid_probe_is_wholedisk(pr))
                return 1;
 
-       for (i = 0; sectors[i] != 0; i++) {
+       nsectors = pr->size >> 9;
+
+       for (i = 0; i < ARRAY_SIZE(sectors); i++) {
                uint64_t off;
                struct promise_metadata *pdc;
 
-               off = ((pr->size / 0x200) - sectors[i]) * 0x200;
+               if (nsectors < sectors[i])
+                       return 1;
+
+               off = (nsectors - sectors[i]) << 9;
                pdc = (struct promise_metadata *)
                                blkid_probe_get_buffer(pr,
                                        off,