* Allow partial MB/GB values to be entered in the slice and label editors.
* Don't strdup the name when calling deviceRegister because the string is copied within new_device. * Use a subtype of 165, not 3, when creating a slice in noninteractive mode. PR: bin/135333 PR: bin/66350 Approved by: rrs (mentor) MFC after: 1 month
This commit is contained in:
parent
0df344c42a
commit
2f90e1d7fc
@ -295,6 +295,8 @@ deviceGetAll(void)
|
||||
|
||||
msgNotify("Probing devices, please wait (this can take a while)...");
|
||||
/* First go for the network interfaces. Stolen shamelessly from ifconfig! */
|
||||
memset(&ifc, 0, sizeof(ifc));
|
||||
memset(buffer, 0, INTERFACE_MAX * sizeof(struct ifreq));
|
||||
ifc.ifc_len = sizeof(buffer);
|
||||
ifc.ifc_buf = buffer;
|
||||
|
||||
@ -371,7 +373,7 @@ deviceGetAll(void)
|
||||
|
||||
if (fd >= 0) close(fd);
|
||||
snprintf(n, sizeof n, device_names[i].name, j);
|
||||
deviceRegister(strdup(n), device_names[i].description, strdup(try),
|
||||
deviceRegister(n, device_names[i].description, strdup(try),
|
||||
DEVICE_TYPE_CDROM, TRUE, mediaInitCDROM, mediaGetCDROM,
|
||||
mediaShutdownCDROM, NULL);
|
||||
if (isDebug())
|
||||
@ -390,7 +392,7 @@ deviceGetAll(void)
|
||||
|
||||
close(fd);
|
||||
snprintf(n, sizeof n, device_names[i].name, j);
|
||||
deviceRegister(strdup(n), device_names[i].description, strdup(try),
|
||||
deviceRegister(n, device_names[i].description, strdup(try),
|
||||
DEVICE_TYPE_FLOPPY, TRUE, mediaInitFloppy, mediaGetFloppy,
|
||||
mediaShutdownFloppy, NULL);
|
||||
if (isDebug())
|
||||
@ -405,7 +407,7 @@ deviceGetAll(void)
|
||||
|
||||
close(fd);
|
||||
snprintf(n, sizeof(n), device_names[i].name, j);
|
||||
deviceRegister(strdup(n), device_names[i].description,
|
||||
deviceRegister(n, device_names[i].description,
|
||||
strdup(try), DEVICE_TYPE_USB, TRUE, mediaInitUSB,
|
||||
mediaGetUSB, mediaShutdownUSB, NULL);
|
||||
|
||||
|
@ -479,6 +479,7 @@ diskPartition(Device *dev)
|
||||
else {
|
||||
char *val, tmp[20], name[16], *cp;
|
||||
daddr_t size;
|
||||
long double dsize;
|
||||
int subtype;
|
||||
chunk_e partitiontype;
|
||||
#ifdef PC98
|
||||
@ -493,11 +494,20 @@ diskPartition(Device *dev)
|
||||
snprintf(tmp, 20, "%jd", (intmax_t)chunk_info[current_chunk]->size);
|
||||
val = msgGetInput(tmp, "Please specify the size for new FreeBSD slice in blocks\n"
|
||||
"or append a trailing `M' for megabytes (e.g. 20M).");
|
||||
if (val && (size = strtoimax(val, &cp, 0)) > 0) {
|
||||
if (val && (dsize = strtold(val, &cp)) > 0 && dsize < UINT32_MAX) {
|
||||
if (*cp && toupper(*cp) == 'M')
|
||||
size *= ONE_MEG;
|
||||
size = (daddr_t) (dsize * ONE_MEG);
|
||||
else if (*cp && toupper(*cp) == 'G')
|
||||
size *= ONE_GIG;
|
||||
size = (daddr_t) (dsize * ONE_GIG);
|
||||
else
|
||||
size = (daddr_t) dsize;
|
||||
|
||||
if (size < ONE_MEG) {
|
||||
msgConfirm("The minimum slice size is 1MB");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
sprintf(tmp, "%d", SUBTYPE_FREEBSD);
|
||||
val = msgGetInput(tmp, "Enter type of partition to create:\n\n"
|
||||
"Pressing Enter will choose the default, a native FreeBSD\n"
|
||||
@ -920,7 +930,8 @@ diskPartitionNonInteractive(Device *dev)
|
||||
{
|
||||
char *cp;
|
||||
int i, all_disk = 0;
|
||||
daddr_t sz;
|
||||
daddr_t size;
|
||||
long double dsize;
|
||||
#ifdef PC98
|
||||
u_char *bootipl;
|
||||
size_t bootipl_size;
|
||||
@ -964,7 +975,7 @@ diskPartitionNonInteractive(Device *dev)
|
||||
/* If a chunk is at least 10MB in size, use it. */
|
||||
if (chunk_info[i]->type == unused && chunk_info[i]->size > (10 * ONE_MEG)) {
|
||||
Create_Chunk(d, chunk_info[i]->offset, chunk_info[i]->size,
|
||||
freebsd, 3,
|
||||
freebsd, SUBTYPE_FREEBSD,
|
||||
(chunk_info[i]->flags & CHUNK_ALIGN),
|
||||
"FreeBSD");
|
||||
variable_set2(DISK_PARTITIONED, "yes", 0);
|
||||
@ -988,16 +999,19 @@ diskPartitionNonInteractive(Device *dev)
|
||||
|
||||
All_FreeBSD(d, all_disk = TRUE);
|
||||
}
|
||||
else if ((sz = strtoimax(cp, &cp, 0))) {
|
||||
/* Look for sz bytes free */
|
||||
else if ((dsize = strtold(cp, &cp))) {
|
||||
if (*cp && toupper(*cp) == 'M')
|
||||
sz *= ONE_MEG;
|
||||
size *= (daddr_t) (dsize * ONE_MEG);
|
||||
else if (*cp && toupper(*cp) == 'G')
|
||||
sz *= ONE_GIG;
|
||||
size = (daddr_t) (dsize * ONE_GIG);
|
||||
else
|
||||
size = (daddr_t) dsize;
|
||||
|
||||
/* Look for size bytes free */
|
||||
for (i = 0; chunk_info[i]; i++) {
|
||||
/* If a chunk is at least sz MB, use it. */
|
||||
if (chunk_info[i]->type == unused && chunk_info[i]->size >= sz) {
|
||||
Create_Chunk(d, chunk_info[i]->offset, sz, freebsd, 3,
|
||||
if (chunk_info[i]->type == unused && chunk_info[i]->size >= size) {
|
||||
Create_Chunk(d, chunk_info[i]->offset, size, freebsd, SUBTYPE_FREEBSD,
|
||||
(chunk_info[i]->flags & CHUNK_ALIGN),
|
||||
"FreeBSD");
|
||||
variable_set2(DISK_PARTITIONED, "yes", 0);
|
||||
@ -1006,7 +1020,7 @@ diskPartitionNonInteractive(Device *dev)
|
||||
}
|
||||
if (!chunk_info[i]) {
|
||||
msgConfirm("Unable to find %jd free blocks on this disk!",
|
||||
(intmax_t)sz);
|
||||
(intmax_t)size);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -999,6 +999,7 @@ diskLabel(Device *dev)
|
||||
else {
|
||||
char *val;
|
||||
daddr_t size;
|
||||
long double dsize;
|
||||
struct chunk *tmp;
|
||||
char osize[80];
|
||||
u_long flags = 0;
|
||||
@ -1019,22 +1020,24 @@ diskLabel(Device *dev)
|
||||
#endif
|
||||
"%jd blocks (%jdMB) are free.",
|
||||
(intmax_t)sz, (intmax_t)sz / ONE_MEG);
|
||||
if (!val || (size = strtoimax(val, &cp, 0)) <= 0) {
|
||||
if (!val || (dsize = strtold(val, &cp)) <= 0) {
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
if (*cp) {
|
||||
if (toupper(*cp) == 'M')
|
||||
size *= ONE_MEG;
|
||||
size = (daddr_t) (dsize * ONE_MEG);
|
||||
else if (toupper(*cp) == 'G')
|
||||
size *= ONE_GIG;
|
||||
size = (daddr_t) (dsize * ONE_GIG);
|
||||
#ifndef __ia64__
|
||||
else if (toupper(*cp) == 'C')
|
||||
size *= (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect);
|
||||
size = (daddr_t) dsize * (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect);
|
||||
#endif
|
||||
else
|
||||
size = (daddr_t) dsize;
|
||||
}
|
||||
if (size <= FS_MIN_SIZE) {
|
||||
if (size < FS_MIN_SIZE) {
|
||||
msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG);
|
||||
clear_wins();
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user