diff -urN dosfstools-2.11/mkdosfs/mkdosfs.c dosfstools-2.11.heads/mkdosfs/mkdosfs.c --- dosfstools-2.11/mkdosfs/mkdosfs.c 2010-12-06 12:56:32.138688700 +0100 +++ dosfstools-2.11.heads/mkdosfs/mkdosfs.c 2010-12-06 12:49:11.415820200 +0100 @@ -576,6 +576,7 @@ static int root_dir_entries = 0; /* Number of root directory entries */ static char *blank_sector; /* Blank sector - all zeros */ static int hidden_sectors = 0; /* Number of hidden sectors */ +static int heads = -1; /* Number of heads */ /* Function prototype definitions */ @@ -1130,7 +1131,13 @@ bs.secs_track = CT_LE_W(geometry.sectors); /* Set up the geometry information */ bs.heads = CT_LE_W(geometry.heads); } + def_hd_params: + if (heads > 0) { /* Overwrite by user definied value */ + if (verbose) + printf("Head number (%d) was overwritten : %d\n", bs.heads, heads); + bs.heads = heads; + } bs.media = (char) 0xf8; /* Set up the media descriptor for a hard drive */ bs.dir_entries[0] = (char) 0; /* Default to 512 entries */ bs.dir_entries[1] = (char) 2; @@ -1762,7 +1769,7 @@ Usage: mkdosfs [-A] [-c] [-C] [-v] [-I] [-l bad-block-file] [-b backup-boot-sector]\n\ [-m boot-msg-file] [-n volume-name] [-i volume-id]\n\ [-s sectors-per-cluster] [-S logical-sector-size] [-f number-of-FATs]\n\ - [-h hidden-sectors] [-F fat-size] [-r root-dir-entries] [-R reserved-sectors]\n\ + [-h hidden-sectors] [-H heads] [-F fat-size] [-r root-dir-entries] [-R reserved-sectors]\n\ /dev/name [blocks]\n"); } @@ -1834,7 +1841,7 @@ #endif , program_name); - while ((c = getopt (argc, argv, "AbcCf:F:Ii:l:m:n:r:R:s:S:h:v")) != EOF) + while ((c = getopt (argc, argv, "AbcCf:F:Ii:l:m:n:r:R:s:S:h:H:v")) != EOF) /* Scan the command line for options */ switch (c) { @@ -1886,6 +1893,15 @@ usage (); } break; + + case 'H': /* H : number of heads */ + heads = (int) strtol (optarg, &tmp, 0); + if ( *tmp || heads < 0 ) + { + printf("Bad number of heads : %s\n", optarg); + usage (); + } + break; case 'I': ignore_full_disk = 1;