From cbebd20d26b8d06e28e67a07050967668af7ce08 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 30 May 2014 10:51:53 +0200 Subject: [PATCH] libfdisk: (gpt) fix last LBA code for S_ISREG Reported-by: Ruediger Meier Signed-off-by: Karel Zak --- libfdisk/src/gpt.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index 2026c538fd..1ee1b49a23 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, -- 2.47.2