Restore loader(8)'s ability for lsdev to show partitions within a bsd slice.
I'm pretty sure this used to work at one time, perhaps long ago. It has been failing recently because if you call disk_open() with dev->d_partition set to -1 when d_slice refers to a bsd slice, it assumes you want it to open the first partition within that slice. When you then pass that open dev instance to ptable_open(), it tries to read the start of the 'a' partition and decides there is no recognizable partition type there. This restores the old functionality by resetting d_offset to the start of the raw slice after disk_open() returns. For good measure, d_partition is also set back to -1, although that doesn't currently affect anything. I would have preferred to make disk_open() avoid such rude assumptions and if you ask for partition -1 you get the raw slice. But the commit history shows that someone already did that once (r239058), and had to revert it (r239232), so I didn't even try to go down that road.
This commit is contained in:
parent
3bea7b5b05
commit
4d02caf7cb
@ -133,6 +133,13 @@ ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
|
||||
dev.d_partition = -1;
|
||||
if (disk_open(&dev, part->end - part->start + 1,
|
||||
od->sectorsize) == 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, part->end - part->start + 1,
|
||||
od->sectorsize, ptblread);
|
||||
if (table != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user