summaryrefslogtreecommitdiff
path: root/util-linux/mkfs_vfat.c
diff options
context:
space:
mode:
authorDenis Vlasenko2009-03-28 19:08:23 +0000
committerDenis Vlasenko2009-03-28 19:08:23 +0000
commita2333c8938af4829a8eac8c09615e6652cd412f1 (patch)
tree480f2729015c99231325990516c74a47ee30d8cd /util-linux/mkfs_vfat.c
parent78f9d8eb7adc10f1af8977212f24ab3c418a9c2b (diff)
downloadbusybox-a2333c8938af4829a8eac8c09615e6652cd412f1.zip
busybox-a2333c8938af4829a8eac8c09615e6652cd412f1.tar.gz
randomtest fixes
Diffstat (limited to 'util-linux/mkfs_vfat.c')
-rw-r--r--util-linux/mkfs_vfat.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/util-linux/mkfs_vfat.c b/util-linux/mkfs_vfat.c
index 705c75c..72c2058 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, &param);