The 16-bit total count of sectors is set by newfs_msdos(8) when the number of
sectors is less than MAXU16 even if asked to format in FAT32.

This diff fixes that according to the FAT32 spec : "For FAT32 volumes, this
field [BPB_TotSec16] must be 0"

OK ?

Index: newfs_msdos.c
===================================================================
RCS file: /cvs/src/sbin/newfs_msdos/newfs_msdos.c,v
retrieving revision 1.27
diff -u -p -r1.27 newfs_msdos.c
--- newfs_msdos.c       23 Nov 2015 19:19:30 -0000      1.27
+++ newfs_msdos.c       26 Apr 2021 16:40:34 -0000
@@ -536,9 +536,10 @@ main(int argc, char *argv[])
           cls == 1 ? "" : "s", bpb.bps * bpb.spc);
     if (!bpb.mid)
        bpb.mid = !bpb.hid ? 0xf0 : 0xf8;
-    if (fat == 32)
+    if (fat == 32) {
        bpb.rdcl = RESFTE;
-    if (bpb.hid + bpb.bsec <= MAXU16) {
+       bpb.sec = 0;
+    } else if (bpb.hid + bpb.bsec <= MAXU16) {
        bpb.sec = bpb.bsec;
        bpb.bsec = 0;
     }

Reply via email to