summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sbin/fdisk/cmd.c18
-rw-r--r--sbin/fdisk/disk.c22
-rw-r--r--sbin/fdisk/disk.h4
-rw-r--r--sbin/fdisk/mbr.c11
-rw-r--r--sbin/fdisk/mbr.h4
-rw-r--r--sbin/fdisk/misc.c21
-rw-r--r--sbin/fdisk/misc.h20
-rw-r--r--sbin/fdisk/part.c21
-rw-r--r--sbin/fdisk/part.h4
-rw-r--r--sbin/fdisk/user.c6
10 files changed, 93 insertions, 38 deletions
diff --git a/sbin/fdisk/cmd.c b/sbin/fdisk/cmd.c
index 2781adbaae9..0cf4afb57a6 100644
--- a/sbin/fdisk/cmd.c
+++ b/sbin/fdisk/cmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.29 2002/01/18 08:33:10 kjell Exp $ */
+/* $OpenBSD: cmd.c,v 1.30 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -64,7 +64,7 @@ Xreinit(cmd, disk, mbr, tt, offset)
/* Tell em we did something */
printf("In memory copy is initialized to:\n");
printf("Offset: %d\t", offset);
- MBR_print(mbr);
+ MBR_print(mbr, cmd->args);
printf("Use 'write' to update disk.\n");
return (CMD_DIRTY);
@@ -83,7 +83,7 @@ Xdisk(cmd, disk, mbr, tt, offset)
int maxsec = 63;
/* Print out disk info */
- DISK_printmetrics(disk);
+ DISK_printmetrics(disk, cmd->args);
#if defined (__powerpc__) || defined (__mips__)
maxcyl = 9999999;
@@ -133,8 +133,8 @@ Xedit(cmd, disk, mbr, tt, offset)
/* Print out current table entry */
pp = &mbr->part[pn];
- PRT_print(0, NULL);
- PRT_print(pn, pp);
+ PRT_print(0, NULL, NULL);
+ PRT_print(pn, pp, NULL);
#define EDIT(p, f, v, n, m, h) \
if ((num = ask_num(p, f, v, n, m, h)) != v) \
@@ -223,8 +223,8 @@ Xsetpid(cmd, disk, mbr, tt, offset)
/* Print out current table entry */
pp = &mbr->part[pn];
- PRT_print(0, NULL);
- PRT_print(pn, pp);
+ PRT_print(0, NULL, NULL);
+ PRT_print(pn, pp, NULL);
#define EDIT(p, f, v, n, m, h) \
if ((num = ask_num(p, f, v, n, m, h)) != v) \
@@ -289,9 +289,9 @@ Xprint(cmd, disk, mbr, tt, offset)
int offset;
{
- DISK_printmetrics(disk);
+ DISK_printmetrics(disk, cmd->args);
printf("Offset: %d\t", offset);
- MBR_print(mbr);
+ MBR_print(mbr, cmd->args);
return (CMD_CONT);
}
diff --git a/sbin/fdisk/disk.c b/sbin/fdisk/disk.c
index 1f46690589b..b3625774b34 100644
--- a/sbin/fdisk/disk.c
+++ b/sbin/fdisk/disk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: disk.c,v 1.13 2001/06/23 01:54:37 kjell Exp $ */
+/* $OpenBSD: disk.c,v 1.14 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997, 2001 Tobias Weingartner
@@ -48,6 +48,7 @@
#include <machine/biosvar.h>
#endif
#include "disk.h"
+#include "misc.h"
int
DISK_open(disk, mode)
@@ -224,15 +225,24 @@ DISK_getmetrics(disk, user)
return (1);
}
+/*
+ * Print the disk geometry information. Take an optional modifier
+ * to indicate the units that should be used for display.
+ */
int
-DISK_printmetrics(disk)
+DISK_printmetrics(disk, units)
disk_t *disk;
-{
-
+ char *units;
+{
+ int i;
+ double size;
+ i = unit_lookup(units);
+ size = (double)disk->real->size * DEV_BSIZE / unit_types[i].conversion;
printf("Disk: %s\t", disk->name);
if (disk->real)
- printf("geometry: %d/%d/%d [%d sectors]\n", disk->real->cylinders,
- disk->real->heads, disk->real->sectors, disk->real->size);
+ printf("geometry: %d/%d/%d [%.0f %s]\n", disk->real->cylinders,
+ disk->real->heads, disk->real->sectors, size,
+ unit_types[i].lname);
else
printf("geometry: <none>\n");
diff --git a/sbin/fdisk/disk.h b/sbin/fdisk/disk.h
index beb2c7b826b..2889997a9d8 100644
--- a/sbin/fdisk/disk.h
+++ b/sbin/fdisk/disk.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: disk.h,v 1.4 2001/08/12 12:03:01 heko Exp $ */
+/* $OpenBSD: disk.h,v 1.5 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -52,7 +52,7 @@ typedef struct _disk_t {
int DISK_open __P((char *, int));
int DISK_close __P((int));
int DISK_getmetrics __P((disk_t *, DISK_metrics *));
-int DISK_printmetrics __P((disk_t *));
+int DISK_printmetrics __P((disk_t *, char *));
#endif /* _DISK_H */
diff --git a/sbin/fdisk/mbr.c b/sbin/fdisk/mbr.c
index f116c9051a4..95213315939 100644
--- a/sbin/fdisk/mbr.c
+++ b/sbin/fdisk/mbr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mbr.c,v 1.14 2002/01/04 08:35:06 kjell Exp $ */
+/* $OpenBSD: mbr.c,v 1.15 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -130,19 +130,20 @@ MBR_make(mbr, mbr_buf)
}
void
-MBR_print(mbr)
+MBR_print(mbr, units)
mbr_t *mbr;
+ char *units;
{
int i;
/* Header */
printf("Signature: 0x%X\n",
(int)mbr->signature);
- PRT_print(0, NULL);
+ PRT_print(0, NULL, units);
/* Entries */
for (i = 0; i < NDOSPART; i++)
- PRT_print(i, &mbr->part[i]);
+ PRT_print(i, &mbr->part[i], units);
}
int
@@ -206,6 +207,6 @@ MBR_pcopy(disk, mbr)
PRT_parse(disk, &mbr_disk[MBR_PART_OFF +
MBR_PART_SIZE * i],
offset, reloff, &mbr->part[i], i);
- PRT_print(i, &mbr->part[i]);
+ PRT_print(i, &mbr->part[i], NULL);
}
}
diff --git a/sbin/fdisk/mbr.h b/sbin/fdisk/mbr.h
index 39aab01bec0..306b0be6a36 100644
--- a/sbin/fdisk/mbr.h
+++ b/sbin/fdisk/mbr.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mbr.h,v 1.8 2002/01/04 08:35:06 kjell Exp $ */
+/* $OpenBSD: mbr.h,v 1.9 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -53,7 +53,7 @@ typedef struct _mbr_t {
/* Prototypes */
void MBR_print_disk __P((char *));
-void MBR_print __P((mbr_t *));
+void MBR_print __P((mbr_t *, char *));
void MBR_parse __P((disk_t *, char *, off_t, off_t, mbr_t *));
void MBR_make __P((mbr_t *, char *));
void MBR_init __P((disk_t *, mbr_t *));
diff --git a/sbin/fdisk/misc.c b/sbin/fdisk/misc.c
index e731194cb3b..997b271c177 100644
--- a/sbin/fdisk/misc.c
+++ b/sbin/fdisk/misc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.c,v 1.7 2002/01/18 08:33:10 kjell Exp $ */
+/* $OpenBSD: misc.c,v 1.8 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -40,6 +40,25 @@
#include <machine/limits.h>
#include "misc.h"
+int
+unit_lookup(units)
+ char *units;
+{
+ int i = 0;
+ if (units == NULL)
+ return (UNIT_TYPE_DEFAULT);
+
+ while (unit_types[i].abbr != NULL) {
+ if (strncasecmp(unit_types[i].abbr, units, 1) == 0)
+ break;
+ i++;
+ }
+ /* default */
+ if (unit_types[i].abbr == NULL)
+ return (UNIT_TYPE_DEFAULT);
+
+ return (i);
+}
int
ask_cmd(cmd)
diff --git a/sbin/fdisk/misc.h b/sbin/fdisk/misc.h
index 92e82e83a42..3a17487321e 100644
--- a/sbin/fdisk/misc.h
+++ b/sbin/fdisk/misc.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.h,v 1.5 2002/01/18 08:33:10 kjell Exp $ */
+/* $OpenBSD: misc.h,v 1.6 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -34,15 +34,33 @@
#define _MISC_H
#include <sys/types.h>
+#include <machine/param.h>
#include "cmd.h"
+/* typedefs */
+
+static const struct unit_type {
+ char *abbr;
+ int conversion;
+ char *lname;
+} unit_types[] = {
+ {"b", 1 , "Bytes"},
+ {" ", DEV_BSIZE , "Sectors"},
+ {"K", 1024 , "Kilobytes"},
+ {"M", 1024 * 1024 , "Megabytes"},
+ {"G", 1024 * 1024 *1024 , "Gigabytes"},
+ {NULL, 0 , NULL },
+};
+
/* Constants */
#define ASK_HEX 0x01
#define ASK_DEC 0x02
+#define UNIT_TYPE_DEFAULT 1
#define DO_CONVERSIONS 0x00000001
#define DO_ROUNDING 0x00000002
/* Prototypes */
+int unit_lookup __P((char *));
int ask_cmd __P((cmd_t *));
int ask_num __P((const char *, int, int, int, int, void (*help) __P((void))));
int ask_yn __P((const char *));
diff --git a/sbin/fdisk/part.c b/sbin/fdisk/part.c
index a69e6257489..c9486637a71 100644
--- a/sbin/fdisk/part.c
+++ b/sbin/fdisk/part.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: part.c,v 1.27 2002/01/18 08:29:01 kjell Exp $ */
+/* $OpenBSD: part.c,v 1.28 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -288,22 +288,29 @@ PRT_make(partn, offset, reloff, prt)
}
void
-PRT_print(num, partn)
+PRT_print(num, partn, units)
int num;
prt_t *partn;
+ char *units;
{
+ double size;
+ int i;
+ i = unit_lookup(units);
if (partn == NULL) {
- printf(" Starting Ending\n");
- printf(" #: id cyl hd sec - cyl hd sec [ start - size]\n");
+ printf(" Starting Ending LBA Info:\n");
+ printf(" #: id C H S - C H S [ start: size ]\n");
printf("------------------------------------------------------------------------\n");
} else {
- printf("%c%1d: %.2X %4d %3d %3d - %4d %3d %3d [%10d - %10d] %s\n",
+ size = (double)partn->ns * DEV_BSIZE /
+ unit_types[i].conversion;
+ printf("%c%1d: %.2X %4d %3d %2d - %4d %3d %2d [%12d:%12.f%s] %s\n",
(partn->flag == 0x80)?'*':' ',
num, partn->id,
- partn->scyl, partn->shead, partn->ssect,
+ partn->scyl, partn->shead, partn->ssect,
partn->ecyl, partn->ehead, partn->esect,
- partn->bs, partn->ns,
+ partn->bs, size,
+ unit_types[i].abbr,
PRT_ascii_id(partn->id));
}
}
diff --git a/sbin/fdisk/part.h b/sbin/fdisk/part.h
index 164dbf3a2a3..965a6d6d2ce 100644
--- a/sbin/fdisk/part.h
+++ b/sbin/fdisk/part.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: part.h,v 1.8 2001/08/12 12:03:01 heko Exp $ */
+/* $OpenBSD: part.h,v 1.9 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -48,7 +48,7 @@ void PRT_printall __P((void));
const char *PRT_ascii_id __P((int));
void PRT_parse __P((disk_t *, void *, off_t, off_t, prt_t *, int));
void PRT_make __P((prt_t *, off_t, off_t, void *));
-void PRT_print __P((int, prt_t *));
+void PRT_print __P((int, prt_t *, char *));
/* This does CHS -> bs/ns */
void PRT_fix_BN __P((disk_t *, prt_t *, int));
diff --git a/sbin/fdisk/user.c b/sbin/fdisk/user.c
index fd5bc2360ad..edd343fd68b 100644
--- a/sbin/fdisk/user.c
+++ b/sbin/fdisk/user.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: user.c,v 1.17 2001/12/15 02:12:26 kjell Exp $ */
+/* $OpenBSD: user.c,v 1.18 2002/01/18 08:38:26 kjell Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -202,14 +202,14 @@ USER_print_disk(disk)
fd = DISK_open(disk->name, O_RDONLY);
offset = firstoff = 0;
- DISK_printmetrics(disk);
+ DISK_printmetrics(disk, NULL);
do {
MBR_read(fd, (off_t)offset, mbr_buf);
MBR_parse(disk, mbr_buf, offset, firstoff, &mbr);
printf("Offset: %d\t", (int)offset);
- MBR_print(&mbr);
+ MBR_print(&mbr, NULL);
/* Print out extended partitions too */
for (offset = i = 0; i < 4; i++)