Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148432648
D19262.id55409.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D19262.id55409.diff
View Options
Index: head/stand/common/disk.h
===================================================================
--- head/stand/common/disk.h
+++ head/stand/common/disk.h
@@ -32,33 +32,36 @@
*
* Whole disk access:
*
- * d_slice = -1
- * d_partition = -1
+ * d_slice = D_SLICENONE
+ * d_partition = <doesn't matter>
*
* Whole MBR slice:
*
* d_slice = MBR slice number (typically 1..4)
- * d_partition = -1
+ * d_partition = D_PARTNONE
*
* BSD disklabel partition within an MBR slice:
*
* d_slice = MBR slice number (typically 1..4)
- * d_partition = disklabel partition (typically 0..19)
+ * d_partition = disklabel partition (typically 0..19 or D_PARTWILD)
*
* BSD disklabel partition on the true dedicated disk:
*
- * d_slice = -1
- * d_partition = disklabel partition (typically 0..19)
+ * d_slice = D_SLICENONE
+ * d_partition = disklabel partition (typically 0..19 or D_PARTWILD)
*
* GPT partition:
*
* d_slice = GPT partition number (typically 1..N)
- * d_partition = 255
+ * d_partition = D_PARTISGPT
*
- * For both MBR and GPT, to automatically find the 'best' slice or partition,
- * set d_slice to zero. This uses the partition type to decide which partition
- * to use according to the following list of preferences:
+ * For MBR, setting d_partition to D_PARTWILD will automatically use the first
+ * partition within the slice.
*
+ * For both MBR and GPT, to automatically find the 'best' slice and partition,
+ * set d_slice to D_SLICEWILD. This uses the partition type to decide which
+ * partition to use according to the following list of preferences:
+ *
* FreeBSD (active)
* FreeBSD (inactive)
* Linux (active)
@@ -80,6 +83,12 @@
#ifndef _DISK_H
#define _DISK_H
+
+#define D_SLICENONE -1
+#define D_SLICEWILD 0
+#define D_PARTNONE -1
+#define D_PARTWILD -2
+#define D_PARTISGPT 255
struct disk_devdesc {
struct devdesc dd; /* Must be first. */
Index: head/stand/common/disk.c
===================================================================
--- head/stand/common/disk.c
+++ head/stand/common/disk.c
@@ -129,15 +129,8 @@
dev.dd.d_dev = pa->dev->dd.d_dev;
dev.dd.d_unit = pa->dev->dd.d_unit;
dev.d_slice = part->index;
- dev.d_partition = -1;
+ dev.d_partition = D_PARTNONE;
if (disk_open(&dev, partsize, sectsize) == 0) {
- /*
- * disk_open() for partition -1 on a bsd slice assumes
- * you want the first bsd partition. Reset things so
- * that we're looking at the start of the raw slice.
- */
- dev.d_partition = -1;
- dev.d_offset = part->start;
table = ptable_open(&dev, partsize, sectsize, ptblread);
if (table != NULL) {
sprintf(line, " %s%s", pa->prefix, pname);
@@ -244,8 +237,8 @@
*/
memcpy(&partdev, dev, sizeof(partdev));
partdev.d_offset = 0;
- partdev.d_slice = -1;
- partdev.d_partition = -1;
+ partdev.d_slice = D_SLICENONE;
+ partdev.d_partition = D_PARTNONE;
dev->d_offset = 0;
table = NULL;
@@ -373,9 +366,9 @@
char *cp;
cp = buf + sprintf(buf, "%s%d", dev->dd.d_dev->dv_name, dev->dd.d_unit);
- if (dev->d_slice >= 0) {
+ if (dev->d_slice > D_SLICENONE) {
#ifdef LOADER_GPT_SUPPORT
- if (dev->d_partition == 255) {
+ if (dev->d_partition == D_PARTISGPT) {
sprintf(cp, "p%d:", dev->d_slice);
return (buf);
} else
@@ -384,7 +377,7 @@
cp += sprintf(cp, "s%d", dev->d_slice);
#endif
}
- if (dev->d_partition >= 0)
+ if (dev->d_partition > D_PARTNONE)
cp += sprintf(cp, "%c", dev->d_partition + 'a');
strcat(cp, ":");
return (buf);
@@ -398,7 +391,9 @@
char *cp;
np = devspec;
- unit = slice = partition = -1;
+ unit = -1;
+ slice = D_SLICEWILD;
+ partition = D_PARTWILD;
if (*np != '\0' && *np != ':') {
unit = strtol(np, &cp, 10);
if (cp == np)
Index: head/stand/efi/libefi/efipart.c
===================================================================
--- head/stand/efi/libefi/efipart.c
+++ head/stand/efi/libefi/efipart.c
@@ -813,8 +813,8 @@
pd->pd_blkio = blkio;
pd_dev.dd.d_dev = dev;
pd_dev.dd.d_unit = pd->pd_unit;
- pd_dev.d_slice = -1;
- pd_dev.d_partition = -1;
+ pd_dev.d_slice = D_SLICENONE;
+ pd_dev.d_partition = D_PARTNONE;
ret = disk_open(&pd_dev, blkio->Media->BlockSize *
(blkio->Media->LastBlock + 1),
blkio->Media->BlockSize);
Index: head/stand/efi/loader/main.c
===================================================================
--- head/stand/efi/loader/main.c
+++ head/stand/efi/loader/main.c
@@ -217,12 +217,12 @@
currdev.dd.d_dev = dp->pd_devsw;
if (dp->pd_parent == NULL) {
currdev.dd.d_unit = dp->pd_unit;
- currdev.d_slice = -1;
- currdev.d_partition = -1;
+ currdev.d_slice = D_SLICENONE;
+ currdev.d_partition = D_PARTNONE;
} else {
currdev.dd.d_unit = dp->pd_parent->pd_unit;
currdev.d_slice = dp->pd_unit;
- currdev.d_partition = 255; /* Assumes GPT */
+ currdev.d_partition = D_PARTISGPT; /* XXX Assumes GPT */
}
set_currdev_devdesc((struct devdesc *)&currdev);
} else {
Index: head/stand/i386/libi386/biosdisk.c
===================================================================
--- head/stand/i386/libi386/biosdisk.c
+++ head/stand/i386/libi386/biosdisk.c
@@ -691,8 +691,8 @@
devd.dd.d_dev = dev;
devd.dd.d_unit = i;
- devd.d_slice = -1;
- devd.d_partition = -1;
+ devd.d_slice = D_SLICENONE;
+ devd.d_partition = D_PARTNONE;
if (disk_open(&devd,
bd->bd_sectorsize * bd->bd_sectors,
bd->bd_sectorsize) == 0) {
@@ -745,8 +745,8 @@
disk.dd.d_dev = dev->dd.d_dev;
disk.dd.d_unit = dev->dd.d_unit;
- disk.d_slice = -1;
- disk.d_partition = -1;
+ disk.d_slice = D_SLICENONE;
+ disk.d_partition = D_PARTNONE;
disk.d_offset = 0;
size = bd->bd_sectors * bd->bd_sectorsize;
Index: head/stand/libsa/zfs/zfs.c
===================================================================
--- head/stand/libsa/zfs/zfs.c
+++ head/stand/libsa/zfs/zfs.c
@@ -588,7 +588,7 @@
int slice = dev->d_slice;
free(dev);
- if (partition != -1 && slice != -1) {
+ if (partition != D_PARTNONE && slice != D_SLICENONE) {
ret = zfs_probe(pa.fd, pool_guid);
if (ret == 0)
return (0);
Index: head/stand/mips/beri/loader/beri_disk_cfi.c
===================================================================
--- head/stand/mips/beri/loader/beri_disk_cfi.c
+++ head/stand/mips/beri/loader/beri_disk_cfi.c
@@ -129,8 +129,8 @@
return (ret);
dev.dd.d_dev = &beri_cfi_disk;
dev.dd.d_unit = 0;
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
if (disk_open(&dev, cfi_get_mediasize(), cfi_get_sectorsize()) == 0) {
snprintf(line, sizeof(line), " cfi%d", 0);
ret = disk_print(&dev, line, verbose);
Index: head/stand/mips/beri/loader/beri_disk_sdcard.c
===================================================================
--- head/stand/mips/beri/loader/beri_disk_sdcard.c
+++ head/stand/mips/beri/loader/beri_disk_sdcard.c
@@ -135,8 +135,8 @@
return (ret);
dev.dd.d_dev = &beri_sdcard_disk;
dev.dd.d_unit = 0;
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
if (disk_open(&dev, altera_sdcard_get_mediasize(),
altera_sdcard_get_sectorsize()) == 0) {
snprintf(line, sizeof(line), " sdcard%d", 0);
Index: head/stand/uboot/common/main.c
===================================================================
--- head/stand/uboot/common/main.c
+++ head/stand/uboot/common/main.c
@@ -213,8 +213,8 @@
*type = DEV_TYP_NONE;
*unit = -1;
- *slice = 0;
- *partition = -1;
+ *slice = D_SLICEWILD;
+ *partition = D_PARTWILD;
devstr = ub_env_get("loaderdev");
if (devstr == NULL) {
@@ -295,7 +295,7 @@
if (p == endp) {
*type = DEV_TYP_NONE;
*unit = -1;
- *slice = 0;
+ *slice = D_SLICEWILD;
return;
}
@@ -309,7 +309,7 @@
if (*p != '.') {
*type = DEV_TYP_NONE;
*unit = -1;
- *slice = 0;
+ *slice = D_SLICEWILD;
return;
}
@@ -329,8 +329,8 @@
/* Junk beyond partition number. */
*type = DEV_TYP_NONE;
*unit = -1;
- *slice = 0;
- *partition = -1;
+ *slice = D_SLICEWILD;
+ *partition = D_PARTWILD;
}
static void
@@ -339,15 +339,20 @@
char slice[32];
char partition[32];
- if (currdev.d_disk.d_slice > 0)
- sprintf(slice, "%d", currdev.d_disk.d_slice);
+ if (currdev.d_disk.d_slice == D_SLICENONE)
+ strlcpy(slice, "<none>", sizeof(slice));
+ else if (currdev.d_disk.d_slice == D_SLICEWILD)
+ strlcpy(slice, "<auto>", sizeof(slice));
else
- strcpy(slice, "<auto>");
+ snprintf(slice, sizeof(slice), "%d", currdev.d_disk.d_slice);
- if (currdev.d_disk.d_partition >= 0)
- sprintf(partition, "%d", currdev.d_disk.d_partition);
+ if (currdev.d_disk.d_partition == D_PARTNONE)
+ strlcpy(partition, "<none>", sizeof(partition));
+ else if (currdev.d_disk.d_partition == D_PARTWILD)
+ strlcpy(partition, "<auto>", sizeof(partition));
else
- strcpy(partition, "<auto>");
+ snprintf(partition, sizeof(partition), "%d",
+ currdev.d_disk.d_partition);
printf(" Checking unit=%d slice=%s partition=%s...",
currdev.dd.d_unit, slice, partition);
Index: head/stand/uboot/lib/disk.c
===================================================================
--- head/stand/uboot/lib/disk.c
+++ head/stand/uboot/lib/disk.c
@@ -254,8 +254,8 @@
for (i = 0; i < stor_info_no; i++) {
dev.dd.d_dev = &uboot_storage;
dev.dd.d_unit = i;
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
snprintf(line, sizeof(line), "\tdisk%d (%s)\n", i,
ub_stor_type(SI(&dev).type));
if ((ret = pager_output(line)) != 0)
Index: head/stand/usb/storage/umass_loader.c
===================================================================
--- head/stand/usb/storage/umass_loader.c
+++ head/stand/usb/storage/umass_loader.c
@@ -196,8 +196,8 @@
return (ret);
dev.d_dev = &umass_disk;
dev.d_unit = 0;
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
if (umass_disk_open_sub(&dev) == 0) {
ret = disk_print(&dev, " umass0", verbose);
Index: head/stand/userboot/userboot/main.c
===================================================================
--- head/stand/userboot/userboot/main.c
+++ head/stand/userboot/userboot/main.c
@@ -240,15 +240,15 @@
if (userboot_disk_maxunit > 0) {
dev.dd.d_dev = &userboot_disk;
dev.dd.d_unit = 0;
- dev.d_slice = 0;
- dev.d_partition = 0;
+ dev.d_slice = D_SLICEWILD;
+ dev.d_partition = D_PARTWILD;
/*
* If we cannot auto-detect the partition type then
* access the disk as a raw device.
*/
if (dev.dd.d_dev->dv_open(NULL, &dev)) {
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
}
dd = &dev.dd;
} else {
Index: head/stand/userboot/userboot/userboot_disk.c
===================================================================
--- head/stand/userboot/userboot/userboot_disk.c
+++ head/stand/userboot/userboot/userboot_disk.c
@@ -137,8 +137,8 @@
break;
dev.dd.d_dev = &userboot_disk;
dev.dd.d_unit = i;
- dev.d_slice = -1;
- dev.d_partition = -1;
+ dev.d_slice = D_SLICENONE;
+ dev.d_partition = D_PARTNONE;
if (disk_open(&dev, ud_info[i].mediasize,
ud_info[i].sectorsize) == 0) {
snprintf(line, sizeof(line), " disk%d", i);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 18, 8:26 PM (13 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29924672
Default Alt Text
D19262.id55409.diff (11 KB)
Attached To
Mode
D19262: Distinguish between "no partition" and "choose best partition" with a constant.
Attached
Detach File
Event Timeline
Log In to Comment