diff options
author | Ed Tsai <Ed.Tsai@mediatek.com> | 2021-01-21 01:19:44 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-01-21 01:19:44 +0000 |
commit | cda7b1f453995254c44d40f91f0adc87e50998c0 (patch) | |
tree | 95ea34e58fdf7f7391974c2697fef829f2456c80 | |
parent | 70d58ee08bc5f6de2478a746054b6387e00abb24 (diff) | |
parent | 58ec2d968cb553e81ea1e24369232b2dbebd4ea4 (diff) | |
download | newfs_msdos-cda7b1f453995254c44d40f91f0adc87e50998c0.tar.gz |
Fixes the partition size for FAT. am: 7dd1b1bd08 am: b6b432c5a3 am: 58ec2d968c
Original change: https://android-review.googlesource.com/c/platform/external/newfs_msdos/+/1553820
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: Id7532028da2b361a75f23cbe9dd00235a697c41e
-rw-r--r-- | mkfs_msdos.c | 15 |
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; |