PERFORCE change 25537 for review
Robert Watson
rwatson at freebsd.org
Fri Feb 21 17:58:10 GMT 2003
http://perforce.freebsd.org/chv.cgi?CH=25537
Change 25537 by rwatson at rwatson_tislabs on 2003/02/21 09:57:16
Submerge local revisions due to extensive conflicts with
main tree revisions.
Affected files ...
.. //depot/projects/trustedbsd/mac/sbin/disklabel/Makefile#4 integrate
.. //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.5#7 integrate
.. //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.8#12 integrate
.. //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.c#17 integrate
.. //depot/projects/trustedbsd/mac/sbin/disklabel/pathnames.h#2 integrate
Differences ...
==== //depot/projects/trustedbsd/mac/sbin/disklabel/Makefile#4 (text+ko) ====
==== //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.5#7 (text+ko) ====
==== //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.8#12 (text+ko) ====
@@ -33,7 +33,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)disklabel.8 8.2 (Berkeley) 4/19/94
-.\" $FreeBSD: src/sbin/disklabel/disklabel.8,v 1.43 2002/12/24 13:41:46 ru Exp $
+.\" $FreeBSD: src/sbin/disklabel/disklabel.8,v 1.45 2003/01/26 14:35:53 phk Exp $
.\"
.Dd July 30, 1999
.Dt DISKLABEL 8
@@ -61,15 +61,11 @@
.Op Fl r
.Op Fl n
.Ar disk Ar protofile
-.Nm
-.Op Fl NW
-.Ar disk
.Pp
.Nm
.Fl B
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk
.Oo Ar disktype/auto Oc
@@ -78,8 +74,7 @@
.Fl B
.Op Fl n
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk Ar disktype/auto
.Oo Ar packid Oc
@@ -88,8 +83,7 @@
.Fl B
.Op Fl n
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk Ar protofile
.Oo Ar disktype/auto Oc
@@ -311,27 +305,6 @@
is used, no data will be written to the device, and instead the
disklabel that would have been written will be printed to stdout. This is
useful to see how a partitioning scheme will work out for a specific disk.
-.Ss Enabling and disabling writing to the disk label area
-.Pp
-By default, it is not possible to write to the disk label area at the beginning
-of a disk. The disk driver arranges for
-.Xr write 2
-and similar system calls
-to return
-.Er EROFS
-on any attempt to do so. If you need
-to write to this area (for example, to obliterate the label), use the form
-.Pp
-.Nm
-.Fl W
-.Ar disk
-.Pp
-To disallow writing to the label area after previously allowing it, use the
-command
-.Pp
-.Nm
-.Fl N
-.Ar disk
.Ss Installing bootstraps
.Pp
The final three forms of
@@ -354,8 +327,7 @@
.Nm
.Fl B
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk
.Oo Ar disktype Oc
@@ -373,8 +345,7 @@
.Fl B
.Op Fl n
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk Ar disktype
.Oo Ar packid Oc
@@ -396,8 +367,7 @@
.Fl B
.Op Fl n
.Oo
-.Fl b Ar boot1
-.Fl s Ar boot2
+.Fl b Ar boot
.Oc
.Ar disk Ar protofile
.Oo Ar disktype Oc
@@ -447,12 +417,8 @@
.Xr disktab 5
entry for the disk if the disktab entry exists and includes those parameters.
.It
-Otherwise, the default boot image names are used:
-.Pa /boot/boot1
-and
-.Pa /boot/boot2
-for the standard stage1 and stage2 boot images (details may vary
-on architectures like the Alpha, where only a single-stage boot is used).
+Otherwise, the default boot image name are used:
+.Pa /boot/boot .
.El
.Ss Initializing/Formatting a bootable disk from scratch
.Pp
@@ -773,21 +739,17 @@
Install a new bootstrap on
.Pa da0s1 .
The boot code comes from
-.Pa /boot/boot1
-and possibly
-.Pa /boot/boot2 .
+.Pa /boot/boot .
On-disk and in-core labels are unchanged.
.Pp
-.Dl disklabel -w -B /dev/da0s1 -b newboot1 -s newboot2 da2212
+.Dl disklabel -w -B /dev/da0s1 -b newboot da2212
.Pp
Install a new label and bootstrap.
The label is derived from disktab information for
.Dq da2212
and installed both in-core and on-disk.
The bootstrap code comes from the files
-.Pa /boot/newboot1
-and
-.Pa /boot/newboot2 .
+.Pa /boot/newboot
.Pp
.Dl dd if=/dev/zero of=/dev/da0 bs=512 count=32
.Dl fdisk -BI da0
==== //depot/projects/trustedbsd/mac/sbin/disklabel/disklabel.c#17 (text+ko) ====
@@ -54,7 +54,7 @@
#endif /* not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sbin/disklabel/disklabel.c,v 1.66 2003/01/16 12:57:53 des Exp $");
+__FBSDID("$FreeBSD: src/sbin/disklabel/disklabel.c,v 1.77 2003/01/26 21:55:43 phk Exp $");
#include <sys/param.h>
#include <sys/file.h>
@@ -69,9 +69,6 @@
#else
#include <sys/diskmbr.h>
#endif
-#ifdef __sparc64__
-#include <sys/sun_disklabel.h>
-#endif
#include <unistd.h>
#include <string.h>
@@ -97,12 +94,6 @@
#ifndef BBSIZE
#define BBSIZE 8192 /* size of boot area, with label */
#endif
-/*
- * Define an upper boundary for the boot blocks.
- */
-#ifndef MAXBBSIZE
-#define MAXBBSIZE 262144 /* max size of boot area, with label */
-#endif
/* FIX! These are too low, but are traditional */
#define DEFAULT_NEWFS_BLOCK 8192U
@@ -113,12 +104,11 @@
#define BIG_NEWFS_FRAG 2048U
#define BIG_NEWFS_CPG 64U
-#if defined(__i386__) || defined(__ia64__)
-#define NUMBOOT 2
-#elif defined(__alpha__) || defined(__sparc64__) || defined(__powerpc__)
-#define NUMBOOT 1
+#if defined(__i386__)
+#elif defined(__alpha__)
+#elif defined(__ia64__)
#else
-#error I do not know about this architecture.
+#error I do not know about this architecture, and shall probably not be compiled for it.
#endif
void makelabel(const char *, const char *, struct disklabel *);
@@ -134,7 +124,6 @@
int getasciilabel(FILE *, struct disklabel *);
int getasciipartspec(char *, struct disklabel *, int, int);
int checklabel(struct disklabel *);
-void setbootflag(struct disklabel *);
void Warning(const char *, ...) __printflike(1, 2);
void usage(void);
struct disklabel *getvirginlabel(void);
@@ -148,7 +137,7 @@
char namebuf[BBSIZE], *np = namebuf;
struct disklabel lab;
-char bootarea[MAXBBSIZE];
+char bootarea[BBSIZE];
char blank[] = "";
char unknown[] = "unknown";
@@ -158,53 +147,35 @@
char part_offset_type[MAX_NUM_PARTS];
int part_set[MAX_NUM_PARTS];
-#if NUMBOOT > 0
int installboot; /* non-zero if we should install a boot program */
-char *bootbuf; /* pointer to buffer with remainder of boot prog */
-int bootsize; /* size of remaining boot program */
char *xxboot; /* primary boot */
-char *bootxx; /* secondary boot */
char boot0[MAXPATHLEN];
-char boot1[MAXPATHLEN];
-#endif
enum {
- UNSPEC, EDIT, NOWRITE, READ, RESTORE, WRITE, WRITEABLE, WRITEBOOT
+ UNSPEC, EDIT, READ, RESTORE, WRITE, WRITEBOOT
} op = UNSPEC;
int rflag;
int disable_write; /* set to disable writing to disk label */
-#define OPTIONS "BNRWb:enrs:w"
+#define OPTIONS "BRb:enrs:w"
int
main(int argc, char *argv[])
{
struct disklabel *lp;
FILE *t;
- int ch, f = 0, flag, error = 0;
+ int ch, f = 0, error = 0;
char *name = 0;
while ((ch = getopt(argc, argv, OPTIONS)) != -1)
switch (ch) {
-#if NUMBOOT > 0
case 'B':
++installboot;
break;
case 'b':
xxboot = optarg;
break;
-#if NUMBOOT > 1
- case 's':
- bootxx = optarg;
- break;
-#endif
-#endif
- case 'N':
- if (op != UNSPEC)
- usage();
- op = NOWRITE;
- break;
case 'n':
disable_write = 1;
break;
@@ -213,11 +184,6 @@
usage();
op = RESTORE;
break;
- case 'W':
- if (op != UNSPEC)
- usage();
- op = WRITEABLE;
- break;
case 'e':
if (op != UNSPEC)
usage();
@@ -237,19 +203,15 @@
}
argc -= optind;
argv += optind;
-#if NUMBOOT > 0
if (installboot) {
+ rflag++;
if (op == UNSPEC)
op = WRITEBOOT;
} else {
if (op == UNSPEC)
op = READ;
- xxboot = bootxx = 0;
+ xxboot = 0;
}
-#else
- if (op == UNSPEC)
- op = READ;
-#endif
if (argc < 1)
usage();
@@ -266,6 +228,10 @@
np = namebuf + strlen(specname) + 1;
f = open(specname, op == READ ? O_RDONLY : O_RDWR);
}
+ if (f < 0 && errno == EBUSY) {
+ /* lets try to get by with ioctls */
+ f = open(specname, O_RDONLY);
+ }
if (f < 0)
err(4, "%s", specname);
@@ -281,12 +247,6 @@
error = edit(lp, f);
break;
- case NOWRITE:
- flag = 0;
- if (ioctl(f, DIOCWLABEL, (char *)&flag) < 0)
- err(4, "ioctl DIOCWLABEL");
- break;
-
case READ:
if (argc != 1)
usage();
@@ -296,7 +256,6 @@
break;
case RESTORE:
-#if NUMBOOT > 0
if (installboot && argc == 3) {
makelabel(argv[2], 0, &lab);
argc--;
@@ -309,7 +268,6 @@
*/
bzero((char *)&lab, sizeof(lab));
}
-#endif
if (argc != 2)
usage();
if (!(t = fopen(argv[1], "r")))
@@ -335,13 +293,6 @@
error = writelabel(f, bootarea, lp);
break;
- case WRITEABLE:
- flag = 1;
- if (ioctl(f, DIOCWLABEL, (char *)&flag) < 0)
- err(4, "ioctl DIOCWLABEL");
- break;
-
-#if NUMBOOT > 0
case WRITEBOOT:
{
struct disklabel tlab;
@@ -350,14 +301,12 @@
tlab = *lp;
if (argc == 2)
makelabel(argv[1], 0, &lab);
- lab.d_bbsize = lp->d_bbsize;
lp = makebootarea(bootarea, &lab, f);
*lp = tlab;
if (checklabel(lp) == 0)
error = writelabel(f, bootarea, lp);
break;
}
-#endif
}
exit(error);
}
@@ -387,149 +336,58 @@
int
writelabel(int f, const char *boot, struct disklabel *lp)
{
- int flag;
#ifdef __alpha__
u_long *p, sum;
int i;
#endif
-#ifdef __sparc64__
- struct sun_disklabel *sl;
- u_short cksum, *sp1, *sp2;
- struct partition *npp;
- struct sun_dkpart *spp;
- int i, secpercyl;
-#endif
if (disable_write) {
Warning("write to disk label supressed - label was as follows:");
display(stdout, lp);
return (0);
- } else {
- setbootflag(lp);
- lp->d_magic = DISKMAGIC;
- lp->d_magic2 = DISKMAGIC;
- lp->d_checksum = 0;
- lp->d_checksum = dkcksum(lp);
- if (rflag || op == WRITEBOOT) {
- /*
- * First set the kernel disk label,
- * then write a label to the raw disk.
- * If the SDINFO ioctl fails because it is unimplemented,
- * keep going; otherwise, the kernel consistency checks
- * may prevent us from changing the current (in-core)
- * label.
- */
- if (op != WRITEBOOT && ioctl(f, DIOCSDINFO, lp) < 0 &&
- errno != ENODEV && errno != ENOTTY) {
- l_perror("ioctl DIOCSDINFO");
- return (1);
- }
- (void)lseek(f, (off_t)0, SEEK_SET);
-
-#ifdef __alpha__
- /*
- * Generate the bootblock checksum for the SRM console.
- */
- for (p = (u_long *)boot, i = 0, sum = 0; i < 63; i++)
- sum += p[i];
- p[63] = sum;
-#endif
-#ifdef __sparc64__
- /*
- * Generate a Sun disklabel around the BSD label for
- * PROM compatability.
- */
- sl = (struct sun_disklabel *)boot;
- memcpy(sl->sl_text, lp->d_packname, sizeof(lp->d_packname));
- sl->sl_rpm = lp->d_rpm;
- sl->sl_pcylinders = lp->d_ncylinders +
- lp->d_acylinders; /* XXX */
- sl->sl_sparespercyl = lp->d_sparespercyl;
- sl->sl_interleave = lp->d_interleave;
- sl->sl_ncylinders = lp->d_ncylinders;
- sl->sl_acylinders = lp->d_acylinders;
- sl->sl_ntracks = lp->d_ntracks;
- sl->sl_nsectors = lp->d_nsectors;
- sl->sl_magic = SUN_DKMAGIC;
- secpercyl = sl->sl_nsectors * sl->sl_ntracks;
- for (i = 0; i < 8; i++) {
- spp = &sl->sl_part[i];
- npp = &lp->d_partitions[i];
- /*
- * SunOS partitions must start on a cylinder
- * boundary. Note this restriction is forced
- * upon FreeBSD/sparc64 labels too, since we
- * want to keep both labels synchronised.
- */
- spp->sdkp_cyloffset = npp->p_offset / secpercyl;
- spp->sdkp_nsectors = npp->p_size;
- }
+ }
- /* Compute the XOR checksum. */
- sp1 = (u_short *)sl;
- sp2 = (u_short *)(sl + 1);
- sl->sl_cksum = cksum = 0;
- while (sp1 < sp2)
- cksum ^= *sp1++;
- sl->sl_cksum = cksum;
-#endif
- if (op != WRITEBOOT) {
- /*
- * write enable label sector before write (if
- * necessary), disable after writing.
- */
- flag = 1;
- (void)ioctl(f, DIOCWLABEL, &flag);
- if (write(f, boot, lp->d_bbsize) != (int)lp->d_bbsize) {
- warn("write");
- return (1);
- }
- } else {
- /*
- * Write out all of the boot area except
- * for the sector reserved for the disklabel
- * itself; that part is written only by
- * the kernel, and we can't get it right.
- */
- ssize_t labelareabegin, labelareaend;
-
- labelareabegin = (LABELSECTOR * lp->d_secsize)
- + LABELOFFSET;
- labelareaend = labelareabegin + lp->d_secsize;
- if (write(f, boot, labelareabegin) !=
- labelareabegin) {
- warn("write");
- return (1);
- }
- (void)lseek(f, (off_t)labelareaend, SEEK_SET);
- if (write(f, boot + labelareaend,
- lp->d_bbsize - labelareaend) !=
- lp->d_bbsize - labelareaend) {
- warn("write");
- return (1);
- }
- }
-#if NUMBOOT > 0
- /*
- * Output the remainder of the disklabel
- */
- if (bootbuf && write(f, bootbuf, bootsize) != bootsize) {
- warn("write");
- return(1);
- }
-#endif
- if (op != WRITEBOOT) {
- flag = 0;
- (void) ioctl(f, DIOCWLABEL, &flag);
- } else if (ioctl(f, DIOCWDINFO, lp) < 0) {
- l_perror("ioctl DIOCWDINFO");
- return (1);
- }
- } else if (ioctl(f, DIOCWDINFO, lp) < 0) {
+ lp->d_magic = DISKMAGIC;
+ lp->d_magic2 = DISKMAGIC;
+ lp->d_checksum = 0;
+ lp->d_checksum = dkcksum(lp);
+ if (!rflag) {
+ if (ioctl(f, DIOCWDINFO, lp) < 0) {
l_perror("ioctl DIOCWDINFO");
return (1);
}
+ return (0);
}
+
+ /*
+ * First set the kernel disk label,
+ * then write a label to the raw disk.
+ * If the SDINFO ioctl fails because it is unimplemented,
+ * keep going; otherwise, the kernel consistency checks
+ * may prevent us from changing the current (in-core)
+ * label.
+ */
+ if (ioctl(f, DIOCSDINFO, lp) < 0 &&
+ errno != ENODEV && errno != ENOTTY) {
+ l_perror("ioctl DIOCSDINFO");
+ return (1);
+ }
+ (void)lseek(f, (off_t)0, SEEK_SET);
+
+#ifdef __alpha__
+ /*
+ * Generate the bootblock checksum for the SRM console.
+ */
+ for (p = (u_long *)boot, i = 0, sum = 0; i < 63; i++)
+ sum += p[i];
+ p[63] = sum;
+#endif
+ if (ioctl(f, DIOCBSDBB, &boot) == 0)
+ return (0);
+ if (write(f, boot, lp->d_bbsize) != (int)lp->d_bbsize) {
+ warn("write");
+ return (1);
+ }
return (0);
}
@@ -604,28 +462,25 @@
struct disklabel *lp;
char *p;
int b;
-#if NUMBOOT > 0
char *dkbasename;
struct stat sb;
-#endif
#ifdef __alpha__
u_long *bootinfo;
int n;
#endif
#ifdef __i386__
char *tmpbuf;
- int i, found;
+ int i, found, dps;
#endif
/* XXX */
- if (dp->d_secsize == 0)
+ if (dp->d_secsize == 0) {
dp->d_secsize = DEV_BSIZE;
- if (dp->d_bbsize == 0)
dp->d_bbsize = BBSIZE;
+ }
lp = (struct disklabel *)
(boot + (LABELSECTOR * dp->d_secsize) + LABELOFFSET);
bzero((char *)lp, sizeof *lp);
-#if NUMBOOT > 0
/*
* If we are not installing a boot program but we are installing a
* label on disk then we must read the current bootarea so we don't
@@ -633,7 +488,7 @@
*/
if (!installboot) {
if (rflag) {
- if (read(f, boot, lp->d_bbsize) < lp->d_bbsize)
+ if (read(f, boot, BBSIZE) < BBSIZE)
err(4, "%s", specname);
bzero((char *)lp, sizeof *lp);
}
@@ -643,7 +498,7 @@
* We are installing a boot program. Determine the name(s) and
* read them into the appropriate places in the boot area.
*/
- if (!xxboot || !bootxx) {
+ if (!xxboot) {
dkbasename = np;
if ((p = rindex(dkname, '/')) == NULL)
p = dkname;
@@ -654,36 +509,22 @@
*np++ = '\0';
if (!xxboot) {
- (void)sprintf(boot0, "%s/boot1", _PATH_BOOTDIR);
+ (void)sprintf(boot0, "%s/boot", _PATH_BOOTDIR);
xxboot = boot0;
}
-#if NUMBOOT > 1
- if (!bootxx) {
- (void)sprintf(boot1, "%s/boot2", _PATH_BOOTDIR);
- bootxx = boot1;
- }
-#endif
}
- /*
- * Strange rules:
- * 1. One-piece bootstrap (hp300/hp800)
- * 1. One-piece bootstrap (alpha/sparc64)
- * up to d_bbsize bytes of ``xxboot'' go in bootarea, the rest
- * is remembered and written later following the bootarea.
- * 2. Two-piece bootstraps (i386/ia64)
- * up to d_secsize bytes of ``xxboot'' go in first d_secsize
- * bytes of bootarea, remaining d_bbsize-d_secsize filled
- * from ``bootxx''.
- */
b = open(xxboot, O_RDONLY);
if (b < 0)
err(4, "%s", xxboot);
-#if NUMBOOT > 1
+ if (fstat(b, &sb) != 0)
+ err(4, "%s", xxboot);
#ifdef __i386__
+ if (sb.st_size > BBSIZE)
+ errx(4, "%s too large", xxboot);
/*
* XXX Botch alert.
- * The i386 has the so-called fdisk table embedded into the
+ * The i386/PC98 has the so-called fdisk table embedded into the
* primary bootstrap. We take care to not clobber it, but
* only if it does already contain some data. (Otherwise,
* the xxboot provides a template.)
@@ -691,77 +532,46 @@
if ((tmpbuf = (char *)malloc((int)dp->d_secsize)) == 0)
err(4, "%s", xxboot);
memcpy((void *)tmpbuf, (void *)boot, (int)dp->d_secsize);
-#endif /* __i386__ */
- if (read(b, boot, (int)dp->d_secsize) < 0)
+
+ if (read(b, boot, BBSIZE) < 0)
err(4, "%s", xxboot);
- (void)close(b);
+
+ /* XXX: rely on some very precise overlaps in definitions */
#ifdef PC98
+ dps = sizeof(struct pc98_partition);
+#else
+ dps = sizeof(struct dos_partition);
+#endif
for (i = DOSPARTOFF, found = 0;
- !found && i < (int)(DOSPARTOFF + NDOSPART * sizeof(struct pc98_partition));
+ !found && i < (int)(DOSPARTOFF + NDOSPART * dps);
i++)
found = tmpbuf[i] != 0;
if (found)
memcpy((void *)&boot[DOSPARTOFF],
(void *)&tmpbuf[DOSPARTOFF],
- NDOSPART * sizeof(struct pc98_partition));
+ NDOSPART * dps);
free(tmpbuf);
-#elif defined(__i386__)
- for (i = DOSPARTOFF, found = 0;
- !found && i < (int)(DOSPARTOFF + NDOSPART*sizeof(struct dos_partition));
- i++)
- found = tmpbuf[i] != 0;
- if (found)
- memcpy((void *)&boot[DOSPARTOFF],
- (void *)&tmpbuf[DOSPARTOFF],
- NDOSPART * sizeof(struct dos_partition));
- free(tmpbuf);
#endif /* __i386__ */
- b = open(bootxx, O_RDONLY);
- if (b < 0)
- err(4, "%s", bootxx);
- if (fstat(b, &sb) != 0)
- err(4, "%s", bootxx);
- if (dp->d_secsize + sb.st_size > dp->d_bbsize)
- errx(4, "%s too large", bootxx);
- if (read(b, &boot[dp->d_secsize],
- (int)(dp->d_bbsize-dp->d_secsize)) < 0)
- err(4, "%s", bootxx);
-#else /* !(NUMBOOT > 1) */
+
#ifdef __alpha__
+ if (sb.st_size > BBSIZE - dp->d_secsize)
+ errx(4, "%s too large", xxboot);
/*
* On the alpha, the primary bootstrap starts at the
* second sector of the boot area. The first sector
* contains the label and must be edited to contain the
* size and location of the primary bootstrap.
*/
- n = read(b, boot + dp->d_secsize, (int)dp->d_bbsize);
+ n = read(b, boot + dp->d_secsize, BBSIZE - dp->d_secsize);
if (n < 0)
err(4, "%s", xxboot);
bootinfo = (u_long *)(boot + 480);
bootinfo[0] = (n + dp->d_secsize - 1) / dp->d_secsize;
bootinfo[1] = 1; /* start at sector 1 */
bootinfo[2] = 0; /* flags (must be zero) */
-#else /* !__alpha__ */
- if (read(b, boot, (int)dp->d_bbsize) < 0)
- err(4, "%s", xxboot);
#endif /* __alpha__ */
- if (fstat(b, &sb) != 0)
- err(4, "%s", xxboot);
- bootsize = (int)sb.st_size - dp->d_bbsize;
- if (bootsize > 0) {
- /* XXX assume d_secsize is a power of two */
- bootsize = (bootsize + dp->d_secsize-1) & ~(dp->d_secsize-1);
- bootbuf = (char *)malloc((size_t)bootsize);
- if (bootbuf == 0)
- err(4, "%s", xxboot);
- if (read(b, bootbuf, bootsize) < 0) {
- free(bootbuf);
- err(4, "%s", xxboot);
- }
- }
-#endif /* NUMBOOT > 1 */
+
(void)close(b);
-#endif /* NUMBOOT > 0 */
/*
* Make sure no part of the bootstrap is written in the area
* reserved for the label.
@@ -801,7 +611,6 @@
fprintf(f, "sectors/cylinder: %lu\n", (u_long)lp->d_secpercyl);
fprintf(f, "cylinders: %lu\n", (u_long)lp->d_ncylinders);
fprintf(f, "sectors/unit: %lu\n", (u_long)lp->d_secperunit);
- fprintf(f, "boot block size: %u\n", lp->d_bbsize);
fprintf(f, "rpm: %u\n", lp->d_rpm);
fprintf(f, "interleave: %u\n", lp->d_interleave);
fprintf(f, "trackskew: %u\n", lp->d_trackskew);
@@ -1143,16 +952,6 @@
lp->d_secperunit = v;
continue;
}
- if (streq(cp, "boot block size")) {
- v = strtoul(tp, NULL, 10);
- if (v == 0 || v > UINT_MAX) {
- fprintf(stderr, "line %d: %s: bad %s\n",
- lineno, tp, cp);
- errors++;
- } else
- lp->d_bbsize = v;
- continue;
- }
if (streq(cp, "rpm")) {
v = strtoul(tp, NULL, 10);
if (v == 0 || v > USHRT_MAX) {
@@ -1553,14 +1352,6 @@
if (pp->p_size == 0 && pp->p_offset != 0)
Warning("partition %c: size 0, but offset %lu",
part, (u_long)pp->p_offset);
-#ifdef __sparc64__
- /* See comment in writelabel(). */
- if (pp->p_offset % lp->d_secpercyl != 0) {
- fprintf(stderr, "partition %c: does not start on a "
- "cylinder boundary!\n", part);
- errors++;
- }
-#endif
#ifdef notdef
if (pp->p_size % lp->d_secpercyl)
Warning("partition %c: size %% cylinder-size != 0",
@@ -1686,10 +1477,10 @@
loclab.d_secpercyl = loclab.d_ntracks * loclab.d_nsectors;
loclab.d_ncylinders = loclab.d_secperunit / loclab.d_secpercyl;
loclab.d_npartitions = MAXPARTITIONS;
- loclab.d_bbsize = BBSIZE;
/* Various (unneeded) compat stuff */
loclab.d_rpm = 3600;
+ loclab.d_bbsize = BBSIZE;
loclab.d_interleave = 1;;
strncpy(loclab.d_typename, "amnesiac",
sizeof(loclab.d_typename));
@@ -1701,48 +1492,7 @@
return (&loclab);
}
-/*
- * If we are installing a boot program that doesn't fit in d_bbsize
- * we need to mark those partitions that the boot overflows into.
- * This allows newfs to prevent creation of a file system where it might
- * clobber bootstrap code.
- */
-void
-setbootflag(struct disklabel *lp)
-{
- struct partition *pp;
- int i, errors = 0;
- char part;
- u_long boffset;
- if (bootbuf == 0)
- return;
- boffset = bootsize / lp->d_secsize;
- for (i = 0; i < lp->d_npartitions; i++) {
- part = 'a' + i;
- pp = &lp->d_partitions[i];
- if (pp->p_size == 0)
- continue;
- if (boffset <= pp->p_offset) {
- if (pp->p_fstype == FS_BOOT)
- pp->p_fstype = FS_UNUSED;
- } else if (pp->p_fstype != FS_BOOT) {
- if (pp->p_fstype != FS_UNUSED) {
- fprintf(stderr,
- "boot overlaps used partition %c\n",
- part);
- errors++;
- } else {
- pp->p_fstype = FS_BOOT;
- Warning("boot overlaps partition %c, %s",
- part, "marked as FS_BOOT");
- }
- }
- }
- if (errors)
- errx(4, "cannot install boot program");
-}
-
/*VARARGS1*/
void
Warning(const char *fmt, ...)
@@ -1759,8 +1509,7 @@
void
usage(void)
{
-#if NUMBOOT > 0
- fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
+ fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
"usage: disklabel [-r] disk",
"\t\t(to read label)",
" disklabel -w [-r] [-n] disk type [ packid ]",
@@ -1769,34 +1518,12 @@
"\t\t(to edit label)",
" disklabel -R [-r] [-n] disk protofile",
"\t\t(to restore label with existing boot program)",
-#if NUMBOOT > 1
- " disklabel -B [-n] [ -b boot1 [ -s boot2 ] ] disk [ type ]",
- "\t\t(to install boot program with existing label)",
- " disklabel -w -B [-n] [ -b boot1 [ -s boot2 ] ] disk type [ packid ]",
- "\t\t(to write label and boot program)",
- " disklabel -R -B [-n] [ -b boot1 [ -s boot2 ] ] disk protofile [ type ]",
- "\t\t(to restore label and boot program)",
-#else
" disklabel -B [-n] [ -b bootprog ] disk [ type ]",
"\t\t(to install boot program with existing on-disk label)",
" disklabel -w -B [-n] [ -b bootprog ] disk type [ packid ]",
"\t\t(to write label and install boot program)",
" disklabel -R -B [-n] [ -b bootprog ] disk protofile [ type ]",
- "\t\t(to restore label and install boot program)",
-#endif
- " disklabel [-NW] disk",
- "\t\t(to write disable/enable label)");
-#else
- fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
- "usage: disklabel [-r] disk", "(to read label)",
- " disklabel -w [-r] [-n] disk type [ packid ]",
- "\t\t(to write label)",
- " disklabel -e [-r] [-n] disk",
- "\t\t(to edit label)",
- " disklabel -R [-r] [-n] disk protofile",
- "\t\t(to restore label)",
- " disklabel [-NW] disk",
- "\t\t(to write disable/enable label)");
-#endif
+ "\t\t(to restore label and install boot program)"
+ );
exit(1);
}
==== //depot/projects/trustedbsd/mac/sbin/disklabel/pathnames.h#2 (text+ko) ====
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message
More information about the trustedbsd-cvs
mailing list