svn commit: r346503 - stable/12/stand/common
Ian Lepore
ian at FreeBSD.org
Sun Apr 21 22:26:29 UTC 2019
Author: ian
Date: Sun Apr 21 22:26:27 2019
New Revision: 346503
URL: https://svnweb.freebsd.org/changeset/base/346503
Log:
MFC r344238-r344241
r344238:
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.
r344239:
Use a couple local variables to avoid repetitive long expressions that
cause line-wrapping.
r344240:
Make lsdev -v output line up in neat columns by using a fixed width for
the size field and a tab between the partition type and the size.
Changes this
disk devices:
disk0 (MMC)
disk0s1: DOS/Windows 49MB
disk0s2: FreeBSD 14GB
disk0s2a: FreeBSD UFS 14GB
disk0s2b: Unknown 2048KB
disk0s2d: FreeBSD UFS 2040KB
to this
disk devices:
disk0 (MMC)
disk0s1: DOS/Windows 49MB
disk0s2: FreeBSD 14GB
disk0s2a: FreeBSD UFS 14GB
disk0s2b: Unknown 2048KB
disk0s2d: FreeBSD UFS 2040KB
r344241:
Garbage collect no-longer-used constant.
Modified:
stable/12/stand/common/disk.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/stand/common/disk.c
==============================================================================
--- stable/12/stand/common/disk.c Sun Apr 21 22:21:36 2019 (r346502)
+++ stable/12/stand/common/disk.c Sun Apr 21 22:26:27 2019 (r346503)
@@ -75,7 +75,7 @@ display_size(uint64_t size, u_int sectorsize)
size /= 1024;
unit = 'M';
}
- sprintf(buf, "%ld%cB", (long)size, unit);
+ sprintf(buf, "%4ld%cB", (long)size, unit);
return (buf);
}
@@ -102,7 +102,6 @@ ptblread(void *d, void *buf, size_t blocks, uint64_t o
blocks * od->sectorsize, (char *)buf, NULL));
}
-#define PWIDTH 35
static int
ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
{
@@ -112,16 +111,16 @@ ptable_print(void *arg, const char *pname, const struc
struct ptable *table;
char line[80];
int res;
+ u_int sectsize;
+ uint64_t partsize;
pa = (struct print_args *)arg;
od = (struct open_disk *)pa->dev->dd.d_opendata;
- sprintf(line, " %s%s: %s", pa->prefix, pname,
- parttype2str(part->type));
- if (pa->verbose)
- sprintf(line, "%-*s%s", PWIDTH, line,
- display_size(part->end - part->start + 1,
- od->sectorsize));
- strcat(line, "\n");
+ sectsize = od->sectorsize;
+ partsize = part->end - part->start + 1;
+ sprintf(line, " %s%s: %s\t%s\n", pa->prefix, pname,
+ parttype2str(part->type),
+ pa->verbose ? display_size(partsize, sectsize) : "");
if (pager_output(line))
return 1;
res = 0;
@@ -131,10 +130,15 @@ ptable_print(void *arg, const char *pname, const struc
dev.dd.d_unit = pa->dev->dd.d_unit;
dev.d_slice = part->index;
dev.d_partition = -1;
- if (disk_open(&dev, part->end - part->start + 1,
- od->sectorsize) == 0) {
- table = ptable_open(&dev, part->end - part->start + 1,
- od->sectorsize, ptblread);
+ 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);
bsd.dev = pa->dev;
@@ -149,7 +153,6 @@ ptable_print(void *arg, const char *pname, const struc
return (res);
}
-#undef PWIDTH
int
disk_print(struct disk_devdesc *dev, char *prefix, int verbose)
More information about the svn-src-all
mailing list