aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/boot0cfg
diff options
context:
space:
mode:
authorRobert Nordier <rnordier@FreeBSD.org>1999-02-26 14:57:17 +0000
committerRobert Nordier <rnordier@FreeBSD.org>1999-02-26 14:57:17 +0000
commitee6fb785cd89b1680ed2a8dc804c7d335c641ea5 (patch)
treeae371113173b96b000c625a26754b7e85a9fad43 /usr.sbin/boot0cfg
parent5052aa25a1f96f4501623c46da9557c3126cf1f4 (diff)
downloadsrc-ee6fb785cd89b1680ed2a8dc804c7d335c641ea5.tar.gz
src-ee6fb785cd89b1680ed2a8dc804c7d335c641ea5.zip
Finish implementing "setdrv" option. This is intended to be used
(with care) in those instances where boot0 is not passed the correct drive number by the PC BIOS. (The symptoms are a "F5 Drive 0" line, even though the current drive is drive 0.)
Notes
Notes: svn path=/head/; revision=44297
Diffstat (limited to 'usr.sbin/boot0cfg')
-rw-r--r--usr.sbin/boot0cfg/boot0cfg.810
-rw-r--r--usr.sbin/boot0cfg/boot0cfg.c7
2 files changed, 10 insertions, 7 deletions
diff --git a/usr.sbin/boot0cfg/boot0cfg.8 b/usr.sbin/boot0cfg/boot0cfg.8
index e949cc76c249..bb73d753d058 100644
--- a/usr.sbin/boot0cfg/boot0cfg.8
+++ b/usr.sbin/boot0cfg/boot0cfg.8
@@ -22,7 +22,7 @@
.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $Id: boot0cfg.8,v 1.1.1.1 1999/02/21 21:23:42 rnordier Exp $
+.\" $Id: boot0cfg.8,v 1.2 1999/02/22 09:36:54 rnordier Exp $
.\"
.Dd February 21, 1999
.Dt BOOT0CFG 8
@@ -101,7 +101,7 @@ the conventional (CHS) interface, when accessing disk-related BIOS
services. The default is
.Sq nopacket .
.It setdrv
-Causes the drive containing the disk to be referenced using drive
+Forces the drive containing the disk to be referenced using drive
number definable by means of the -d option. The default is
.Sq nosetdrv .
.It update
@@ -131,7 +131,7 @@ option may cause
.Sq boot0
to fail, depending on the nature of BIOS support.
.Pp
-The
+Use of the
.Sq setdrv
-option is presently implemented
-.Dq syntactically but not semantically .
+option with an incorrect -d operand may cause the MBR to be written
+to the wrong disk. Be careful!
diff --git a/usr.sbin/boot0cfg/boot0cfg.c b/usr.sbin/boot0cfg/boot0cfg.c
index 67d0c882d216..20fdcc34e90c 100644
--- a/usr.sbin/boot0cfg/boot0cfg.c
+++ b/usr.sbin/boot0cfg/boot0cfg.c
@@ -26,7 +26,7 @@
#ifndef lint
static const char rcsid[] =
- "$Id: boot0cfg.c,v 1.1.1.1 1999/02/21 21:23:42 rnordier Exp $";
+ "$Id: boot0cfg.c,v 1.2 1999/02/22 09:36:54 rnordier Exp $";
#endif /* not lint */
#include <sys/param.h>
@@ -44,6 +44,7 @@ static const char rcsid[] =
#define MBRSIZE 512 /* master boot record size */
+#define OFF_DRIVE 0x1ba /* offset: setdrv drive */
#define OFF_FLAGS 0x1bb /* offset: option flags */
#define OFF_TICKS 0x1bc /* offset: clock ticks */
#define OFF_PTBL 0x1be /* offset: partition table */
@@ -154,6 +155,8 @@ main(int argc, char *argv[])
errx(1, "%s: bad magic", bpath);
memcpy(buf + OFF_PTBL, part, sizeof(part));
}
+ if (d_arg != -1)
+ buf[OFF_DRIVE] = d_arg;
if (o_flag) {
buf[OFF_FLAGS] &= o_and;
buf[OFF_FLAGS] |= o_or;
@@ -185,7 +188,7 @@ main(int argc, char *argv[])
part[i].dp_size);
}
printf("\n");
- printf("drive=0x0 options=");
+ printf("drive=0x%x options=", buf[OFF_DRIVE]);
for (i = 0; i < nopt; i++) {
if (i)
printf(",");