-m<MB> feature to know how big things have to me.

write 2kB of zeroes at the start of new partitions to clear out old gunk
(such as subpartitioning or old boot code).
This commit is contained in:
Ben Gras 2005-09-09 13:23:24 +00:00
parent 852a2c9832
commit 0e809f9c08

View file

@ -59,8 +59,9 @@ Num Sort Type
#define DEV_FD0 0x200 /* Device number of /dev/fd0 */ #define DEV_FD0 0x200 /* Device number of /dev/fd0 */
#define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */ #define DEV_C0D0 0x300 /* Device number of /dev/c0d0 */
#define MIN_REGION_MB 500 int min_region_mb = 500;
#define MIN_REGION_SECTORS (1024*1024*MIN_REGION_MB/SECTOR_SIZE)
#define MIN_REGION_SECTORS (1024*1024*min_region_mb/SECTOR_SIZE)
#define MAX_REGION_MB 4095 #define MAX_REGION_MB 4095
#define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB) #define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB)
@ -2509,7 +2510,7 @@ select_disk(void)
} }
int int
scribble_region(region_t *reg, struct part_entry **pe) scribble_region(region_t *reg, struct part_entry **pe, int *made_new)
{ {
int ex, trunc = 0, changed = 0, i; int ex, trunc = 0, changed = 0, i;
struct part_entry *newpart; struct part_entry *newpart;
@ -2527,7 +2528,8 @@ scribble_region(region_t *reg, struct part_entry **pe)
changed = 1; changed = 1;
cylinderalign(reg); cylinderalign(reg);
} }
} if(made_new) *made_new = 1;
} else if(made_new) *made_new = 0;
#if 0 #if 0
if(trunc) { if(trunc) {
printf("\nWill only use %dMB.\n", MAX_REGION_MB); printf("\nWill only use %dMB.\n", MAX_REGION_MB);
@ -2605,7 +2607,7 @@ do_autopart(int resultfd)
struct part_entry *pe; struct part_entry *pe;
char sure[50]; char sure[50];
struct part_entry orig_table[1 + NR_PARTITIONS]; struct part_entry orig_table[1 + NR_PARTITIONS];
int region, disk; int region, disk, newp;
nordonly = 1; nordonly = 1;
@ -2629,13 +2631,12 @@ do_autopart(int resultfd)
} while(!r); /* Back to step 2. */ } while(!r); /* Back to step 2. */
/* Write things. */ /* Write things. */
if(scribble_region(r, &pe)) { if(scribble_region(r, &pe, &newp)) {
char *name; char *name;
int i, found = -1; int i, found = -1;
char partbuf[100], devname[100]; char partbuf[100], devname[100];
struct part_entry *tpe; struct part_entry *tpe;
printstep(3, "Confirm your choices"); printstep(3, "Confirm your choices");
region = (int)(r-regions); region = (int)(r-regions);
@ -2708,6 +2709,18 @@ do_autopart(int resultfd)
fprintf(stderr, "Autopart internal error (disk sanity check failed).\n"); fprintf(stderr, "Autopart internal error (disk sanity check failed).\n");
exit(1); exit(1);
} }
if(newp) {
int fd;
if((fd=open(devname, O_WRONLY)) < 0) {
perror(devname);
} else {
/* Clear any subpartitioning. */
static char sub[2048];
write(fd, sub, sizeof(sub));
close(fd);
}
}
return 0; return 0;
} }
@ -2782,8 +2795,11 @@ int main(int argc, char **argv)
} else { } else {
int c; int c;
/* autopart uses getopt() */ /* autopart uses getopt() */
while((c = getopt(argc, argv, "f:")) != EOF) { while((c = getopt(argc, argv, "m:f:")) != EOF) {
switch(c) { switch(c) {
case 'm':
min_region_mb = atoi(optarg);
break;
case 'f': case 'f':
/* Make sure old data file is gone. */ /* Make sure old data file is gone. */
unlink(optarg); unlink(optarg);