summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Tsai <Ed.Tsai@mediatek.com>2021-01-21 00:03:57 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-01-21 00:03:57 +0000
commitb6b432c5a3bd27185d73076b54e28b475a043b57 (patch)
tree95ea34e58fdf7f7391974c2697fef829f2456c80
parent52a1f477401229a9cace451885c5ce35553b400a (diff)
parent7dd1b1bd08f55066e1b2f83dc03fe8b937cb6e09 (diff)
downloadnewfs_msdos-b6b432c5a3bd27185d73076b54e28b475a043b57.tar.gz
Fixes the partition size for FAT. am: 7dd1b1bd08
Original change: https://android-review.googlesource.com/c/platform/external/newfs_msdos/+/1553820 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I0cf18f63c856b1a9181eb7a3c48817c4dc6e281c
-rw-r--r--mkfs_msdos.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/mkfs_msdos.c b/mkfs_msdos.c
index 0ef30f2..878ff8f 100644
--- a/mkfs_msdos.c
+++ b/mkfs_msdos.c
@@ -847,16 +847,17 @@ static int getdiskinfo(int fd, const char *fname, const char *dtype,
if (ckgeom(fname, bpb->bpbBytesPerSec, "bytes/sector") == -1) return -1;
- u_long block_size;
- if (ioctl(fd, BLKGETSIZE, &block_size)) {
- err(1, "ioctl(BLKGETSIZE) failed");
+ u_long device_size;
+ if (ioctl(fd, BLKGETSIZE64, &device_size)) {
+ err(1, "ioctl(BLKGETSIZE64) failed");
}
- if (block_size > UINT32_MAX) {
- errx(1, "block size too large: %lu", block_size);
+ u_long sectors = device_size/bpb->bpbBytesPerSec;
+ if (sectors > UINT32_MAX) {
+ errx(1, "too many sectors: %lu (%lu byte device, %u bytes/sector)",
+ sectors, device_size, bpb->bpbBytesPerSec);
}
-
- bpb->bpbHugeSectors = (u_int)block_size;
+ bpb->bpbHugeSectors = sectors;
bpb->bpbSecPerTrack = 63;
if (ckgeom(fname, bpb->bpbSecPerTrack, "sectors/track") == -1) return -1;