diff options
author | Karel Zak | 2014-05-30 10:51:53 +0200 |
---|---|---|
committer | Karel Zak | 2014-05-30 10:51:53 +0200 |
commit | cbebd20d26b8d06e28e67a07050967668af7ce08 (patch) | |
tree | aa77408f6b882a17ab6d19327da4cdbd830ff783 /libfdisk/src/gpt.c | |
parent | lslogins: fix pretty-print columns (diff) | |
download | kernel-qcow2-util-linux-cbebd20d26b8d06e28e67a07050967668af7ce08.tar.gz kernel-qcow2-util-linux-cbebd20d26b8d06e28e67a07050967668af7ce08.tar.xz kernel-qcow2-util-linux-cbebd20d26b8d06e28e67a07050967668af7ce08.zip |
libfdisk: (gpt) fix last LBA code for S_ISREG
Reported-by: Ruediger Meier <sweet_f_a@gmx.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/gpt.c')
-rw-r--r-- | libfdisk/src/gpt.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index 2026c538f..1ee1b49a2 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -604,6 +604,7 @@ done: static uint64_t last_lba(struct fdisk_context *cxt) { struct stat s; + uint64_t sectors = 0; memset(&s, 0, sizeof(s)); if (fstat(cxt->dev_fd, &s) == -1) { @@ -612,13 +613,15 @@ static uint64_t last_lba(struct fdisk_context *cxt) } if (S_ISBLK(s.st_mode)) - return cxt->total_sectors - 1; - else if (S_ISREG(s.st_mode)) { - uint64_t sectors = s.st_size >> cxt->sector_size; - return (sectors / cxt->sector_size) - 1ULL; - } else + sectors = cxt->total_sectors - 1; + else if (S_ISREG(s.st_mode)) + sectors = ((uint64_t) s.st_size / + (uint64_t) cxt->sector_size) - 1ULL; + else fdisk_warnx(cxt, _("gpt: cannot handle files with mode %o"), s.st_mode); - return 0; + + DBG(LABEL, ul_debug("GPT last LBA: %ju", sectors)); + return sectors; } static ssize_t read_lba(struct fdisk_context *cxt, uint64_t lba, |