svn commit: r237360 - user/ae/bootcode/sys/boot/i386/libi386

Andrey V. Elsukov ae at FreeBSD.org
Thu Jun 21 07:48:15 UTC 2012


Author: ae
Date: Thu Jun 21 07:48:14 2012
New Revision: 237360
URL: http://svn.freebsd.org/changeset/base/237360

Log:
  Pass additional arguments to the printing function via bd_print_args
  structure.

Modified:
  user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c

Modified: user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c
==============================================================================
--- user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c	Thu Jun 21 07:19:39 2012	(r237359)
+++ user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c	Thu Jun 21 07:48:14 2012	(r237360)
@@ -116,6 +116,12 @@ static int bd_open(struct open_file *f, 
 static int bd_close(struct open_file *f);
 static void bd_print(int verbose);
 
+struct bd_print_args {
+	struct open_disk	*od;
+	const char		*prefix;
+	int			verbose;
+};
+
 struct devsw biosdisk = {
 	"disk",
 	DEVT_DISK,
@@ -294,23 +300,27 @@ display_size(uint64_t size, uint16_t sec
 static void
 printpartition(void *arg, const char *pname, const struct ptable_entry *part)
 {
-	struct open_disk *od, *bsd;
+	struct bd_print_args *pa, bsd;
 	struct i386_devdesc dev;
-	static char line[80];
+	char line[80];
 
-	od = (struct open_disk *)arg;
-	sprintf(line, "\tdisk%d%s: %s %s\n", od->od_dkunit, pname,
-	    parttype2str(part->type),
-	    display_size(part->end - part->start + 1, BDSECSZ(od)));
+	pa = (struct bd_print_args *)arg;
+	sprintf(line, "  %s%s: %s %s\n", pa->prefix, pname,
+	    parttype2str(part->type), pa->verbose == 0 ? "":
+	    display_size(part->end - part->start + 1, BDSECSZ(pa->od)));
 	pager_output(line);
 	if (part->type == PART_FREEBSD) {
 		/* Open slice with BSD label */
-		dev.d_unit = od->od_dkunit;
+		dev.d_unit = pa->od->od_dkunit;
 		dev.d_kind.biosdisk.slice = part->index;
 		dev.d_kind.biosdisk.partition = -1;
-		if (!bd_opendisk(&bsd, &dev)) {
-			ptable_iterate(bsd->od_ptable, bsd, printpartition);
-			bd_closedisk(bsd);
+		if (!bd_opendisk(&bsd.od, &dev)) {
+			sprintf(line, "  %s%s", pa->prefix, pname);
+			bsd.prefix = line;
+			bsd.verbose = pa->verbose;
+			ptable_iterate(bsd.od->od_ptable, &bsd,
+			    printpartition);
+			bd_closedisk(bsd.od);
 		}
 	}
 }
@@ -320,9 +330,9 @@ printpartition(void *arg, const char *pn
 static void
 bd_print(int verbose)
 {
+	struct bd_print_args pa;
 	static char line[80];
 	struct i386_devdesc dev;
-	struct open_disk *od;
 	int i;
 
 	for (i = 0; i < nbdinfo; i++) {
@@ -335,9 +345,13 @@ bd_print(int verbose)
 		dev.d_unit = i;
 		dev.d_kind.biosdisk.slice = -1;
 		dev.d_kind.biosdisk.partition = -1;
-		if (!bd_opendisk(&od, &dev)) {
-			ptable_iterate(od->od_ptable, od, printpartition);
-			bd_closedisk(od);
+		if (!bd_opendisk(&pa.od, &dev)) {
+			sprintf(line, "    disk%d", i);
+			pa.prefix = line;
+			pa.verbose = verbose;
+			ptable_iterate(pa.od->od_ptable, &pa,
+			    printpartition);
+			bd_closedisk(pa.od);
 		}
 	}
 }


More information about the svn-src-user mailing list