Page MenuHomeFreeBSD

D55524.id172717.diff
No OneTemporary

D55524.id172717.diff

diff --git a/usr.sbin/diskinfo/Makefile b/usr.sbin/diskinfo/Makefile
--- a/usr.sbin/diskinfo/Makefile
+++ b/usr.sbin/diskinfo/Makefile
@@ -1,7 +1,7 @@
PROG= diskinfo
MAN= diskinfo.8
-LIBADD= util
+LIBADD= util xo
.include <bsd.prog.mk>
diff --git a/usr.sbin/diskinfo/diskinfo.c b/usr.sbin/diskinfo/diskinfo.c
--- a/usr.sbin/diskinfo/diskinfo.c
+++ b/usr.sbin/diskinfo/diskinfo.c
@@ -41,6 +41,7 @@
#include <errno.h>
#include <fcntl.h>
#include <libutil.h>
+#include <libxo/xo.h>
#include <paths.h>
#include <err.h>
#include <geom/geom_disk.h>
@@ -91,6 +92,10 @@
u_int sectorsize, fwsectors, fwheads, zoned = 0, isreg;
uint32_t zone_mode;
+ argc = xo_parse_args(argc, argv);
+ if (argc < 0)
+ exit(1);
+
while ((ch = getopt(argc, argv, "cilpsStvw")) != -1) {
switch (ch) {
case 'c':
@@ -146,6 +151,7 @@
if (posix_memalign((void **)&buf, PAGE_SIZE, MAXTX))
errx(1, "Can't allocate memory buffer");
+ xo_open_list("disk");
for (i = 0; i < argc; i++) {
fd = open(argv[i], (opt_w ? O_RDWR : O_RDONLY) | O_DIRECT);
if (fd < 0 && errno == ENOENT && *argv[i] != '/') {
@@ -222,56 +228,94 @@
if (error == 0)
zoned = 1;
}
- if (!opt_v) {
- printf("%s", argv[i]);
- printf("\t%u", sectorsize);
- printf("\t%jd", (intmax_t)mediasize);
- printf("\t%jd", (intmax_t)mediasize/sectorsize);
- printf("\t%jd", (intmax_t)stripesize);
- printf("\t%jd", (intmax_t)stripeoffset);
- if (fwsectors != 0 && fwheads != 0) {
- printf("\t%jd", (intmax_t)mediasize /
- (fwsectors * fwheads * sectorsize));
- printf("\t%u", fwheads);
- printf("\t%u", fwsectors);
- }
- } else {
- humanize_number(tstr, 5, (int64_t)mediasize, "",
- HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
- printf("%s\n", argv[i]);
- printf("\t%-12u\t# sectorsize\n", sectorsize);
- printf("\t%-12jd\t# mediasize in bytes (%s)\n",
- (intmax_t)mediasize, tstr);
- printf("\t%-12jd\t# mediasize in sectors\n",
- (intmax_t)mediasize/sectorsize);
- printf("\t%-12jd\t# stripesize\n", stripesize);
- printf("\t%-12jd\t# stripeoffset\n", stripeoffset);
- if (fwsectors != 0 && fwheads != 0) {
- printf("\t%-12jd\t# Cylinders according to firmware.\n", (intmax_t)mediasize /
- (fwsectors * fwheads * sectorsize));
- printf("\t%-12u\t# Heads according to firmware.\n", fwheads);
- printf("\t%-12u\t# Sectors according to firmware.\n", fwsectors);
- }
- strlcpy(arg.name, "GEOM::descr", sizeof(arg.name));
- arg.len = sizeof(arg.value.str);
- if (ioctl(fd, DIOCGATTR, &arg) == 0)
- printf("\t%-12s\t# Disk descr.\n", arg.value.str);
- if (ioctl(fd, DIOCGIDENT, ident) == 0)
- printf("\t%-12s\t# Disk ident.\n", ident);
- strlcpy(arg.name, "GEOM::attachment", sizeof(arg.name));
- arg.len = sizeof(arg.value.str);
- if (ioctl(fd, DIOCGATTR, &arg) == 0)
- printf("\t%-12s\t# Attachment\n", arg.value.str);
- if (ioctl(fd, DIOCGPHYSPATH, physpath) == 0)
- printf("\t%-12s\t# Physical path\n", physpath);
- printf("\t%-12s\t# TRIM/UNMAP support\n",
- candelete(fd) ? "Yes" : "No");
- rotationrate(fd, rrate, sizeof(rrate));
- printf("\t%-12s\t# Rotation rate in RPM\n", rrate);
- if (zoned != 0)
- printf("\t%-12s\t# Zone Mode\n", zone_desc);
+ xo_open_instance("disk");
+ if (xo_get_style(NULL) == XO_STYLE_TEXT) {
+ if (!opt_v) {
+ printf("%s", argv[i]);
+ printf("\t%u", sectorsize);
+ printf("\t%jd", (intmax_t)mediasize);
+ printf("\t%jd", (intmax_t)mediasize/sectorsize);
+ printf("\t%jd", (intmax_t)stripesize);
+ printf("\t%jd", (intmax_t)stripeoffset);
+ if (fwsectors != 0 && fwheads != 0) {
+ printf("\t%jd", (intmax_t)mediasize /
+ (fwsectors * fwheads * sectorsize));
+ printf("\t%u", fwheads);
+ printf("\t%u", fwsectors);
+ }
+ } else {
+ humanize_number(tstr, 5, (int64_t)mediasize, "",
+ HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
+ printf("%s\n", argv[i]);
+ printf("\t%-12u\t# sectorsize\n", sectorsize);
+ printf("\t%-12jd\t# mediasize in bytes (%s)\n",
+ (intmax_t)mediasize, tstr);
+ printf("\t%-12jd\t# mediasize in sectors\n",
+ (intmax_t)mediasize/sectorsize);
+ printf("\t%-12jd\t# stripesize\n", stripesize);
+ printf("\t%-12jd\t# stripeoffset\n", stripeoffset);
+ if (fwsectors != 0 && fwheads != 0) {
+ printf("\t%-12jd\t# Cylinders according to firmware.\n", (intmax_t)mediasize /
+ (fwsectors * fwheads * sectorsize));
+ printf("\t%-12u\t# Heads according to firmware.\n", fwheads);
+ printf("\t%-12u\t# Sectors according to firmware.\n", fwsectors);
+ }
+ strlcpy(arg.name, "GEOM::descr", sizeof(arg.name));
+ arg.len = sizeof(arg.value.str);
+ if (ioctl(fd, DIOCGATTR, &arg) == 0)
+ printf("\t%-12s\t# Disk descr.\n", arg.value.str);
+ if (ioctl(fd, DIOCGIDENT, ident) == 0)
+ printf("\t%-12s\t# Disk ident.\n", ident);
+ strlcpy(arg.name, "GEOM::attachment", sizeof(arg.name));
+ arg.len = sizeof(arg.value.str);
+ if (ioctl(fd, DIOCGATTR, &arg) == 0)
+ printf("\t%-12s\t# Attachment\n", arg.value.str);
+ if (ioctl(fd, DIOCGPHYSPATH, physpath) == 0)
+ printf("\t%-12s\t# Physical path\n", physpath);
+ printf("\t%-12s\t# TRIM/UNMAP support\n",
+ candelete(fd) ? "Yes" : "No");
+ rotationrate(fd, rrate, sizeof(rrate));
+ printf("\t%-12s\t# Rotation rate in RPM\n", rrate);
+ if (zoned != 0)
+ printf("\t%-12s\t# Zone Mode\n", zone_desc);
+ }
+ printf("\n");
}
- printf("\n");
+
+ /* Emit structured data for non-text output */
+ xo_emit("{e:device/%s}", argv[i]);
+ xo_emit("{e:sectorsize/%u}", sectorsize);
+ xo_emit("{e:mediasize/%jd}", (intmax_t)mediasize);
+ humanize_number(tstr, 5, (int64_t)mediasize, "",
+ HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
+ xo_emit("{e:mediasize_human/%s}", tstr);
+ xo_emit("{e:mediasize_sectors/%jd}", (intmax_t)mediasize/sectorsize);
+ xo_emit("{e:stripesize/%jd}", (intmax_t)stripesize);
+ xo_emit("{e:stripeoffset/%jd}", (intmax_t)stripeoffset);
+ if (fwsectors != 0 && fwheads != 0) {
+ xo_emit("{e:cylinders/%jd}", (intmax_t)mediasize /
+ (fwsectors * fwheads * sectorsize));
+ xo_emit("{e:heads/%u}", fwheads);
+ xo_emit("{e:sectors/%u}", fwsectors);
+ }
+ strlcpy(arg.name, "GEOM::descr", sizeof(arg.name));
+ arg.len = sizeof(arg.value.str);
+ if (ioctl(fd, DIOCGATTR, &arg) == 0)
+ xo_emit("{e:description/%s}", arg.value.str);
+ if (ioctl(fd, DIOCGIDENT, ident) == 0)
+ xo_emit("{e:ident/%s}", ident);
+ strlcpy(arg.name, "GEOM::attachment", sizeof(arg.name));
+ arg.len = sizeof(arg.value.str);
+ if (ioctl(fd, DIOCGATTR, &arg) == 0)
+ xo_emit("{e:attachment/%s}", arg.value.str);
+ if (ioctl(fd, DIOCGPHYSPATH, physpath) == 0)
+ xo_emit("{e:physpath/%s}", physpath);
+ xo_emit("{e:trim_support/%s}", candelete(fd) ? "Yes" : "No");
+ rotationrate(fd, rrate, sizeof(rrate));
+ xo_emit("{e:rotation_rate/%s}", rrate);
+ if (zoned != 0)
+ xo_emit("{e:zone_mode/%s}", zone_desc);
+ xo_close_instance("disk");
if (opt_c)
commandtime(fd, mediasize, sectorsize);
if (opt_t)
@@ -283,7 +327,9 @@
out:
close(fd);
}
+ xo_close_list("disk");
free(buf);
+ xo_finish();
exit (exitval);
}
@@ -538,7 +584,7 @@
static void
commandtime(int fd, off_t mediasize, u_int sectorsize)
-{
+{
double dtmega, dtsector;
int i;
@@ -649,7 +695,7 @@
printf("\t1024 kbytes: ");
iops(fd, mediasize, 1024 * 1024);
-
+
printf("\n");
}

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 8, 4:19 AM (4 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31075176
Default Alt Text
D55524.id172717.diff (7 KB)

Event Timeline