diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-28 22:08:23 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-28 22:08:23 +0300 |
commit | a2333c8938af4829a8eac8c09615e6652cd412f1 (patch) | |
tree | 480f2729015c99231325990516c74a47ee30d8cd /util-linux/mkfs_vfat.c | |
parent | 78f9d8eb7adc10f1af8977212f24ab3c418a9c2b (diff) |
randomtest fixes
Diffstat (limited to 'util-linux/mkfs_vfat.c')
-rw-r--r-- | util-linux/mkfs_vfat.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/util-linux/mkfs_vfat.c b/util-linux/mkfs_vfat.c index 705c75c20..72c2058b5 100644 --- a/util-linux/mkfs_vfat.c +++ b/util-linux/mkfs_vfat.c @@ -323,9 +323,20 @@ int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) * fs size <= 16G: 8k clusters * fs size > 16G: 16k clusters */ - sect_per_clust = volume_size_bytes >= ((off_t)16)*1024*1024*1024 ? 32 : - volume_size_bytes >= ((off_t)8)*1024*1024*1024 ? 16 : - volume_size_bytes >= 260*1024*1024 ? 8 : 1; + sect_per_clust = 1; + if (volume_size_bytes >= 260*1024*1024) { + sect_per_clust = 8; + /* fight gcc: */ + /* "error: integer overflow in expression" */ + /* "error: right shift count >= width of type" */ + if (sizeof(off_t) > 4) { + unsigned t = (volume_size_bytes >> 31 >> 1); + if (t >= 8/4) + sect_per_clust = 16; + if (t >= 16/4) + sect_per_clust = 32; + } + } } else { // floppy, loop, or regular file int not_floppy = ioctl(dev, FDGETPRM, ¶m); |