summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2019-01-06 10:51:31 +0200
committerRobert Mustacchi <rm@joyent.com>2019-01-11 00:15:38 +0000
commitb928ac841f6012f92d5aedbd7dfacf443921fee3 (patch)
tree637c0d13632223efd12c34d1a44d93452598f4ce
parentc65ebfc7045424bd04a6c7719a27b0ad3399ad54 (diff)
downloadillumos-joyent-b928ac841f6012f92d5aedbd7dfacf443921fee3.tar.gz
10182 dd: print scaled stats
Reviewed by: Andy Fiddaman <af@citrus-it.net> Reviewed by: Adam Števko <adam.stevko@gmail.com> Reviewed by: Marcel Telka <marcel@telka.sk> Reviewed by: Gergő Mihály Doma <domag02@gmail.com> Approved by: Robert Mustacchi <rm@joyent.com>
-rw-r--r--usr/src/cmd/dd/Makefile1
-rw-r--r--usr/src/cmd/dd/dd.c620
2 files changed, 234 insertions, 387 deletions
diff --git a/usr/src/cmd/dd/Makefile b/usr/src/cmd/dd/Makefile
index 4088622905..1a459b9e94 100644
--- a/usr/src/cmd/dd/Makefile
+++ b/usr/src/cmd/dd/Makefile
@@ -31,6 +31,7 @@ include ../Makefile.cmd
CFLAGS += $(CCVERBOSE)
CERRWARN += -_gcc=-Wno-uninitialized
CPPFLAGS += -D_FILE_OFFSET_BITS=64
+LDLIBS += -lcmdutils
.KEEP_STATE:
diff --git a/usr/src/cmd/dd/dd.c b/usr/src/cmd/dd/dd.c
index 6589ba740b..2cd372f604 100644
--- a/usr/src/cmd/dd/dd.c
+++ b/usr/src/cmd/dd/dd.c
@@ -29,7 +29,7 @@
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
-/* All Rights Reserved */
+/* All Rights Reserved */
/*
* convert and copy
@@ -49,6 +49,7 @@
#include <sys/time.h>
#include <errno.h>
#include <strings.h>
+#include <libcmdutils.h>
/* The BIG parameter is machine dependent. It should be a long integer */
/* constant that can be used by the number parser to check the validity */
@@ -169,7 +170,7 @@ static sig_atomic_t nstats; /* do we need to output stats */
/* This is an EBCDIC to ASCII conversion table */
/* from a proposed BTL standard April 16, 1979 */
-static unsigned char svr4_etoa [] =
+static unsigned char svr4_etoa[] =
{
0000, 0001, 0002, 0003, 0234, 0011, 0206, 0177,
0227, 0215, 0216, 0013, 0014, 0015, 0016, 0017,
@@ -208,7 +209,7 @@ static unsigned char svr4_etoa [] =
/* This is an ASCII to EBCDIC conversion table */
/* from a proposed BTL standard April 16, 1979 */
-static unsigned char svr4_atoe [] =
+static unsigned char svr4_atoe[] =
{
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057,
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017,
@@ -360,7 +361,7 @@ static unsigned char ltou[] =
/* BSD-compatible EBCDIC to ASCII translate table */
-static unsigned char bsd_etoa[] =
+static unsigned char bsd_etoa[] =
{
0000, 0001, 0002, 0003, 0234, 0011, 0206, 0177,
0227, 0215, 0216, 0013, 0014, 0015, 0016, 0017,
@@ -398,7 +399,7 @@ static unsigned char bsd_etoa[] =
/* BSD-compatible ASCII to EBCDIC translate table */
-static unsigned char bsd_atoe[] =
+static unsigned char bsd_atoe[] =
{
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057,
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017,
@@ -436,7 +437,7 @@ static unsigned char bsd_atoe[] =
/* BSD-compatible ASCII to IBM translate table */
-static unsigned char bsd_atoibm[] =
+static unsigned char bsd_atoibm[] =
{
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057,
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017,
@@ -522,104 +523,82 @@ main(int argc, char **argv)
/* not getopt()'ed because dd has no options but only operand(s) */
- for (c = optind; c < argc; c++)
- {
+ for (c = optind; c < argc; c++) {
string = argv[c];
- if (match("ibs="))
- {
+ if (match("ibs=")) {
ibs = (unsigned)number(BIG);
continue;
}
- if (match("obs="))
- {
+ if (match("obs=")) {
obs = (unsigned)number(BIG);
continue;
}
- if (match("cbs="))
- {
+ if (match("cbs=")) {
cbs = (unsigned)number(BIG);
continue;
}
- if (match("bs="))
- {
+ if (match("bs=")) {
bs = (unsigned)number(BIG);
continue;
}
- if (match("if="))
- {
+ if (match("if=")) {
ifile = string;
continue;
}
- if (match("of="))
- {
+ if (match("of=")) {
ofile = string;
continue;
}
- if (match("skip="))
- {
+ if (match("skip=")) {
skip = number(BIG);
continue;
}
- if (match("iseek="))
- {
+ if (match("iseek=")) {
iseekn = number(BIG);
continue;
}
- if (match("oseek="))
- {
+ if (match("oseek=")) {
oseekn = number(BIG);
continue;
}
- if (match("seek=")) /* retained for compatibility */
- {
+ if (match("seek=")) { /* retained for compatibility */
oseekn = number(BIG);
continue;
}
- if (match("ostride="))
- {
+ if (match("ostride=")) {
ostriden = ((off_t)number(BIG)) - 1;
continue;
}
- if (match("istride="))
- {
+ if (match("istride=")) {
istriden = ((off_t)number(BIG)) - 1;
continue;
}
- if (match("stride="))
- {
+ if (match("stride=")) {
istriden = ostriden = ((off_t)number(BIG)) - 1;
continue;
}
- if (match("count="))
- {
+ if (match("count=")) {
count = number(BIG);
ecount = B_TRUE;
continue;
}
- if (match("files="))
- {
+ if (match("files=")) {
files = (int)number(BIG);
continue;
}
- if (match("conv="))
- {
- for (;;)
- {
- if (match(","))
- {
+ if (match("conv=")) {
+ for (;;) {
+ if (match(",")) {
continue;
}
- if (*string == '\0')
- {
+ if (*string == '\0') {
break;
}
- if (match("block"))
- {
+ if (match("block")) {
conv = BLOCK;
continue;
}
- if (match("unblock"))
- {
+ if (match("unblock")) {
conv = UNBLOCK;
continue;
}
@@ -627,69 +606,57 @@ main(int argc, char **argv)
/* ebcdicb, ibmb, and asciib must precede */
/* ebcdic, ibm, and ascii in this test */
- if (match("ebcdicb"))
- {
+ if (match("ebcdicb")) {
conv = EBCDIC;
trantype = BSDXLATE;
continue;
}
- if (match("ibmb"))
- {
+ if (match("ibmb")) {
conv = IBM;
trantype = BSDXLATE;
continue;
}
- if (match("asciib"))
- {
+ if (match("asciib")) {
conv = ASCII;
trantype = BSDXLATE;
continue;
}
- if (match("ebcdic"))
- {
+ if (match("ebcdic")) {
conv = EBCDIC;
trantype = SVR4XLATE;
continue;
}
- if (match("ibm"))
- {
+ if (match("ibm")) {
conv = IBM;
trantype = SVR4XLATE;
continue;
}
- if (match("ascii"))
- {
+ if (match("ascii")) {
conv = ASCII;
trantype = SVR4XLATE;
continue;
}
- if (match("lcase"))
- {
+ if (match("lcase")) {
cflag |= LCASE;
continue;
}
- if (match("ucase"))
- {
+ if (match("ucase")) {
cflag |= UCASE;
continue;
}
- if (match("swab"))
- {
+ if (match("swab")) {
cflag |= SWAB;
continue;
}
- if (match("noerror"))
- {
+ if (match("noerror")) {
cflag |= NERR;
continue;
}
- if (match("notrunc"))
- {
+ if (match("notrunc")) {
trunc = 0;
continue;
}
- if (match("sync"))
- {
+ if (match("sync")) {
cflag |= SYNC;
continue;
}
@@ -697,25 +664,19 @@ main(int argc, char **argv)
}
continue;
}
- if (match("oflag="))
- {
- for (;;)
- {
- if (match(","))
- {
+ if (match("oflag=")) {
+ for (;;) {
+ if (match(",")) {
continue;
}
- if (*string == '\0')
- {
+ if (*string == '\0') {
break;
}
- if (match("dsync"))
- {
+ if (match("dsync")) {
oflag |= O_DSYNC;
continue;
}
- if (match("sync"))
- {
+ if (match("sync")) {
oflag |= O_SYNC;
continue;
}
@@ -725,43 +686,37 @@ main(int argc, char **argv)
}
badarg:
(void) fprintf(stderr, "dd: %s \"%s\"\n",
- gettext("bad argument:"), string);
+ gettext("bad argument:"), string);
exit(2);
}
/* Perform consistency checks on options, decode strange conventions */
- if (bs)
- {
+ if (bs) {
ibs = obs = bs;
}
- if ((ibs == 0) || (obs == 0))
- {
+ if ((ibs == 0) || (obs == 0)) {
(void) fprintf(stderr, "dd: %s\n",
- gettext("buffer sizes cannot be zero"));
+ gettext("buffer sizes cannot be zero"));
exit(2);
}
if (ostriden == (off_t)-1) {
(void) fprintf(stderr, "dd: %s\n",
- gettext("stride must be greater than zero"));
+ gettext("stride must be greater than zero"));
exit(2);
}
if (istriden == (off_t)-1) {
(void) fprintf(stderr, "dd: %s\n",
- gettext("stride must be greater than zero"));
+ gettext("stride must be greater than zero"));
exit(2);
}
- if (conv == COPY)
- {
- if ((bs == 0) || (cflag&(LCASE|UCASE)))
- {
+ if (conv == COPY) {
+ if ((bs == 0) || (cflag & (LCASE | UCASE))) {
conv = REBLOCK;
}
}
- if (cbs == 0)
- {
- switch (conv)
- {
+ if (cbs == 0) {
+ switch (conv) {
case BLOCK:
case UNBLOCK:
conv = REBLOCK;
@@ -783,68 +738,67 @@ main(int argc, char **argv)
/* Expand options into lower and upper case versions if necessary */
- switch (conv)
- {
+ switch (conv) {
case REBLOCK:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCREBLOCK;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCREBLOCK;
break;
case UNBLOCK:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCUNBLOCK;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCUNBLOCK;
break;
case BLOCK:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCBLOCK;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCBLOCK;
break;
case ASCII:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCASCII;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCASCII;
break;
case NBASCII:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCNBASCII;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCNBASCII;
break;
case EBCDIC:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCEBCDIC;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCEBCDIC;
break;
case NBEBCDIC:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCNBEBCDIC;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCNBEBCDIC;
break;
case IBM:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCIBM;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCIBM;
break;
case NBIBM:
- if (cflag&LCASE)
+ if (cflag & LCASE)
conv = LCNBIBM;
- else if (cflag&UCASE)
+ else if (cflag & UCASE)
conv = UCNBIBM;
break;
}
@@ -859,18 +813,14 @@ main(int argc, char **argv)
/* Open the input file, or duplicate standard input */
ibf = -1;
- if (ifile)
- {
+ if (ifile) {
ibf = open(ifile, 0);
- }
- else
- {
+ } else {
ifile = "";
- ibf = dup(0);
+ ibf = dup(STDIN_FILENO);
}
- if (ibf == -1)
- {
+ if (ibf == -1) {
(void) fprintf(stderr, "dd: %s: ", ifile);
perror("open");
exit(2);
@@ -879,17 +829,16 @@ main(int argc, char **argv)
/* Open the output file, or duplicate standard output */
obf = -1;
- if (ofile)
- {
- if (trunc == 0) /* do not truncate output file */
- obf = open(ofile, (O_WRONLY|O_CREAT|oflag),
- (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
- else if (oseekn && (trunc == 1))
- {
- obf = open(ofile, O_WRONLY|O_CREAT|oflag,
- (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
- if (obf == -1)
- {
+ if (ofile) {
+ if (trunc == 0) { /* do not truncate output file */
+ obf = open(ofile, (O_WRONLY | O_CREAT | oflag),
+ (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
+ S_IROTH | S_IWOTH));
+ } else if (oseekn && (trunc == 1)) {
+ obf = open(ofile, O_WRONLY | O_CREAT | oflag,
+ (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
+ S_IROTH | S_IWOTH));
+ if (obf == -1) {
(void) fprintf(stderr, "dd: %s: ", ofile);
perror("open");
exit(2);
@@ -897,24 +846,21 @@ main(int argc, char **argv)
(void) fstat(obf, &file_stat);
if (((file_stat.st_mode & S_IFMT) == S_IFREG) &&
(ftruncate(obf, (((off_t)oseekn) * ((off_t)obs)))
- == -1))
- {
+ == -1)) {
perror("ftruncate");
exit(2);
}
+ } else {
+ obf = open(ofile, O_WRONLY | O_CREAT | O_TRUNC | oflag,
+ (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
+ S_IROTH | S_IWOTH));
}
- else
- obf = open(ofile, O_WRONLY|O_CREAT|O_TRUNC|oflag,
- (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
- }
- else
- {
+ } else {
ofile = "";
- obf = dup(1);
+ obf = dup(STDOUT_FILENO);
}
- if (obf == -1)
- {
+ if (obf == -1) {
(void) fprintf(stderr, "dd: %s: ", ofile);
perror("open");
exit(2);
@@ -926,22 +872,21 @@ main(int argc, char **argv)
/* If no conversions, the input buffer is the output buffer */
- if (conv == COPY)
- {
+ if (conv == COPY) {
obuf = ibuf;
- }
+ } else {
- /* Expand memory to get an output buffer. Leave enough room at the */
- /* end to convert a logical record when doing block conversions. */
+ /*
+ * Expand memory to get an output buffer. Leave enough room
+ * at the end to convert a logical record when doing block
+ * conversions.
+ */
- else
- {
obuf = (unsigned char *)valloc(obs + cbs + 10);
}
- if ((ibuf == (unsigned char *)NULL) || (obuf == (unsigned char *)NULL))
- {
+ if ((ibuf == NULL) || (obuf == NULL)) {
(void) fprintf(stderr,
- "dd: %s\n", gettext("not enough memory"));
+ "dd: %s\n", gettext("not enough memory"));
exit(2);
}
@@ -950,8 +895,7 @@ main(int argc, char **argv)
* Also enable it to be queried via SIGINFO and SIGUSR1
*/
- if (signal(SIGINT, SIG_IGN) != SIG_IGN)
- {
+ if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
(void) signal(SIGINT, term);
}
@@ -974,32 +918,22 @@ main(int argc, char **argv)
/* Skip input blocks */
- while (skip)
- {
+ while (skip) {
ibc = read(ibf, (char *)ibuf, ibs);
- if (ibc == (unsigned)-1)
- {
- if (++nbad > BADLIMIT)
- {
+ if (ibc == (unsigned)-1) {
+ if (++nbad > BADLIMIT) {
(void) fprintf(stderr, "dd: %s\n",
- gettext("skip failed"));
+ gettext("skip failed"));
exit(2);
- }
- else
- {
+ } else {
perror("read");
}
- }
- else
- {
- if (ibc == 0)
- {
+ } else {
+ if (ibc == 0) {
(void) fprintf(stderr, "dd: %s\n",
gettext("cannot skip past end-of-file"));
exit(3);
- }
- else
- {
+ } else {
nbad = 0;
}
}
@@ -1008,16 +942,14 @@ main(int argc, char **argv)
/* Seek past input blocks */
- if (iseekn && lseek(ibf, (((off_t)iseekn) * ((off_t)ibs)), 1) == -1)
- {
+ if (iseekn && lseek(ibf, (((off_t)iseekn) * ((off_t)ibs)), 1) == -1) {
perror("lseek");
exit(2);
}
/* Seek past output blocks */
- if (oseekn && lseek(obf, (((off_t)oseekn) * ((off_t)obs)), 1) == -1)
- {
+ if (oseekn && lseek(obf, (((off_t)oseekn) * ((off_t)obs)), 1) == -1) {
perror("lseek");
exit(2);
}
@@ -1035,8 +967,7 @@ main(int argc, char **argv)
/* Grab our start time for siginfo purposes */
startt = gethrtime();
- for (;;)
- {
+ for (;;) {
if (nstats != 0) {
stats();
nstats = 0;
@@ -1045,8 +976,7 @@ main(int argc, char **argv)
if ((count == 0 && ecount == B_FALSE) || (nifr+nipr < count)) {
/* If proceed on error is enabled, zero the input buffer */
- if (cflag&NERR)
- {
+ if (cflag & NERR) {
ip = ibuf + ibs;
c = ibs;
if (c & 1) /* if the size is odd, */
@@ -1074,43 +1004,31 @@ main(int argc, char **argv)
/* Process input errors */
- if (ibc == (unsigned)-1)
- {
+ if (ibc == (unsigned)-1) {
perror("read");
- if (((cflag&NERR) == 0) || (++nbad > BADLIMIT))
- {
- while (obc)
- {
+ if (((cflag & NERR) == 0) ||
+ (++nbad > BADLIMIT)) {
+ while (obc) {
(void) flsh();
}
term(2);
- }
- else
- {
+ } else {
stats();
ibc = ibs; /* assume a full block */
}
- }
- else
- {
+ } else {
nbad = 0;
}
- }
-
- /* Record count satisfied, simulate end of file */
-
- else
- {
+ } else {
+ /* Record count satisfied, simulate end of file */
ibc = 0;
files = 1;
}
/* Process end of file */
- if (ibc == 0)
- {
- switch (conv)
- {
+ if (ibc == 0) {
+ switch (conv) {
case UNBLOCK:
case LCUNBLOCK:
case UCUNBLOCK:
@@ -1120,11 +1038,9 @@ main(int argc, char **argv)
/* Trim trailing blanks from the last line */
- if ((c = cbc) != 0)
- {
+ if ((c = cbc) != 0) {
do {
- if ((*--op) != ' ')
- {
+ if ((*--op) != ' ') {
op++;
break;
}
@@ -1135,8 +1051,7 @@ main(int argc, char **argv)
/* Flush the output buffer if full */
- while (obc >= obs)
- {
+ while (obc >= obs) {
op = flsh();
}
}
@@ -1154,16 +1069,13 @@ main(int argc, char **argv)
/* Pad trailing blanks if the last line is short */
- if (cbc)
- {
+ if (cbc) {
obc += c = cbs - cbc;
cbc = 0;
- if (c > 0)
- {
+ if (c > 0) {
/* Use the right kind of blank */
- switch (conv)
- {
+ switch (conv) {
case BLOCK:
case LCBLOCK:
case UCBLOCK:
@@ -1194,8 +1106,7 @@ main(int argc, char **argv)
/* Flush the output buffer if full */
- while (obc >= obs)
- {
+ while (obc >= obs) {
op = flsh();
}
break;
@@ -1203,43 +1114,34 @@ main(int argc, char **argv)
/* If no more files to read, flush the output buffer */
- if (--files <= 0)
- {
+ if (--files <= 0) {
(void) flsh();
- if ((close(obf) != 0) || (fclose(stdout) != 0))
- {
+ if ((close(obf) != 0) ||
+ (fclose(stdout) != 0)) {
perror(gettext("dd: close error"));
exit(2);
}
term(0); /* successful exit */
- }
- else
- {
+ } else {
continue; /* read the next file */
}
- }
-
- /* Normal read, check for special cases */
-
- else if (ibc == ibs)
- {
+ } else if (ibc == ibs) {
+ /* Normal read, check for special cases */
nifr++; /* count another full input record */
- }
- else
- {
+ } else {
nipr++; /* count a partial input record */
/* If `sync' enabled, pad nulls */
- if ((cflag&SYNC) && ((cflag&NERR) == 0))
- {
+ if ((cflag & SYNC) && ((cflag & NERR) == 0)) {
c = ibs - ibc;
ip = ibuf + ibs;
do {
- if ((conv == BLOCK) || (conv == UNBLOCK))
- *--ip = ' ';
- else
- *--ip = '\0';
+ if ((conv == BLOCK) ||
+ (conv == UNBLOCK))
+ *--ip = ' ';
+ else
+ *--ip = '\0';
} while (--c);
ibc = ibs;
}
@@ -1247,11 +1149,9 @@ main(int argc, char **argv)
/* Swap the bytes in the input buffer if necessary */
- if (cflag&SWAB)
- {
+ if (cflag & SWAB) {
ip = ibuf;
- if (ibc & 1) /* if the byte count is odd, */
- {
+ if (ibc & 1) { /* if the byte count is odd, */
ip[ibc] = 0; /* make it even, pad with zero */
}
c = ibc >> 1; /* compute the pair count */
@@ -1265,8 +1165,7 @@ main(int argc, char **argv)
/* Select the appropriate conversion loop */
ip = ibuf;
- switch (conv)
- {
+ switch (conv) {
/* Simple copy: no conversion, preserve the input block size */
@@ -1289,16 +1188,13 @@ main(int argc, char **argv)
case NBIBM:
case LCNBIBM:
case UCNBIBM:
- while ((c = ibc) != 0)
- {
- if (c > (obs - obc))
- {
+ while ((c = ibc) != 0) {
+ if (c > (obs - obc)) {
c = obs - obc;
}
ibc -= c;
obc += c;
- switch (conv)
- {
+ switch (conv) {
case REBLOCK:
do {
*op++ = *ip++;
@@ -1371,8 +1267,7 @@ main(int argc, char **argv)
} while (--c);
break;
}
- if (obc >= obs)
- {
+ if (obc >= obs) {
op = flsh();
}
}
@@ -1386,19 +1281,16 @@ main(int argc, char **argv)
case ASCII:
case LCASCII:
case UCASCII:
- while ((c = ibc) != 0)
- {
- if (c > (cbs - cbc))
- /* if more than one record, */
- {
+ while ((c = ibc) != 0) {
+ if (c > (cbs - cbc)) {
+ /* if more than one record, */
c = cbs - cbc;
- /* only copy one record */
+ /* only copy one record */
}
ibc -= c;
cbc += c;
obc += c;
- switch (conv)
- {
+ switch (conv) {
case UNBLOCK:
do {
*op++ = *ip++;
@@ -1438,12 +1330,10 @@ main(int argc, char **argv)
/* Trim trailing blanks if the line is full */
- if (cbc == cbs)
- {
+ if (cbc == cbs) {
c = cbs; /* `do - while' is usually */
do { /* faster than `for' */
- if ((*--op) != ' ')
- {
+ if ((*--op) != ' ') {
op++;
break;
}
@@ -1454,8 +1344,7 @@ main(int argc, char **argv)
/* Flush the output buffer if full */
- while (obc >= obs)
- {
+ while (obc >= obs) {
op = flsh();
}
}
@@ -1473,49 +1362,43 @@ main(int argc, char **argv)
case IBM:
case LCIBM:
case UCIBM:
- while ((c = ibc) != 0)
- {
+ while ((c = ibc) != 0) {
int nlflag = 0;
- /* We may have to skip to the end of a long line */
+ /*
+ * We may have to skip to the end of a long
+ * line.
+ */
- if (skipf)
- {
+ if (skipf) {
do {
- if ((ic = *ip++) == '\n')
- {
+ if ((ic = *ip++) == '\n') {
skipf = 0;
c--;
break;
}
} while (--c);
- if ((ibc = c) == 0)
- {
+ if ((ibc = c) == 0) {
continue;
- /* read another block */
+ /* read another block */
}
}
/* If anything left, copy until newline */
- if (c > (cbs - cbc + 1))
- {
+ if (c > (cbs - cbc + 1)) {
c = cbs - cbc + 1;
}
ibc -= c;
cbc += c;
obc += c;
- switch (conv)
- {
+ switch (conv) {
case BLOCK:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = ic;
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1524,12 +1407,9 @@ main(int argc, char **argv)
case LCBLOCK:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = utol[ic];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1538,12 +1418,9 @@ main(int argc, char **argv)
case UCBLOCK:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = ltou[ic];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1552,12 +1429,9 @@ main(int argc, char **argv)
case EBCDIC:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = atoe[ic];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1566,12 +1440,9 @@ main(int argc, char **argv)
case LCEBCDIC:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = atoe[utol[ic]];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1580,12 +1451,9 @@ main(int argc, char **argv)
case UCEBCDIC:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = atoe[ltou[ic]];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1594,12 +1462,9 @@ main(int argc, char **argv)
case IBM:
do {
- if ((ic = *ip++) != '\n')
- {
+ if ((ic = *ip++) != '\n') {
*op++ = atoibm[ic];
- }
- else
- {
+ } else {
nlflag = 1;
break;
}
@@ -1608,12 +1473,10 @@ main(int argc, char **argv)
case LCIBM:
do {
- if ((ic = *ip++) != '\n')
- {
- *op++ = atoibm[utol[ic]];
- }
- else
- {
+ if ((ic = *ip++) != '\n') {
+ *op++ =
+ atoibm[utol[ic]];
+ } else {
nlflag = 1;
break;
}
@@ -1622,12 +1485,10 @@ main(int argc, char **argv)
case UCIBM:
do {
- if ((ic = *ip++) != '\n')
- {
- *op++ = atoibm[ltou[ic]];
- }
- else
- {
+ if ((ic = *ip++) != '\n') {
+ *op++ =
+ atoibm[ltou[ic]];
+ } else {
nlflag = 1;
break;
}
@@ -1638,18 +1499,15 @@ main(int argc, char **argv)
/* If newline found, update all the counters and */
/* pointers, pad with trailing blanks if necessary */
- if (nlflag)
- {
+ if (nlflag) {
ibc += c - 1;
obc += cbs - cbc;
c += cbs - cbc;
cbc = 0;
- if (c > 0)
- {
+ if (c > 0) {
/* Use the right kind of blank */
- switch (conv)
- {
+ switch (conv) {
case BLOCK:
case LCBLOCK:
case UCBLOCK:
@@ -1679,8 +1537,7 @@ main(int argc, char **argv)
/* If not end of line, this line may be too long */
- else if (cbc > cbs)
- {
+ else if (cbc > cbs) {
skipf = 1; /* note skip in progress */
obc--;
op--;
@@ -1690,8 +1547,7 @@ main(int argc, char **argv)
/* Flush the output buffer if full */
- while (obc >= obs)
- {
+ while (obc >= obs) {
op = flsh();
}
}
@@ -1716,21 +1572,17 @@ main(int argc, char **argv)
/* ******************************************************************** */
static int
-match(s)
-char *s;
+match(char *s)
{
char *cs;
cs = string;
- while (*cs++ == *s)
- {
- if (*s++ == '\0')
- {
+ while (*cs++ == *s) {
+ if (*s++ == '\0') {
goto true;
}
}
- if (*s != '\0')
- {
+ if (*s != '\0') {
return (0);
}
@@ -1756,8 +1608,7 @@ true:
/* ******************************************************************** */
static unsigned long long
-number(big)
-long long big;
+number(long long big)
{
char *cs;
long long n;
@@ -1765,14 +1616,11 @@ long long big;
cs = string;
n = 0;
- while ((*cs >= '0') && (*cs <= '9') && (n <= cut))
- {
- n = n*10 + *cs++ - '0';
+ while ((*cs >= '0') && (*cs <= '9') && (n <= cut)) {
+ n = n * 10 + *cs++ - '0';
}
- for (;;)
- {
- switch (*cs++)
- {
+ for (;;) {
+ switch (*cs++) {
case 'Z':
n *= 1024;
@@ -1820,17 +1668,16 @@ long long big;
/* End of string, check for a valid number */
case '\0':
- if ((n > big) || (n < 0))
- {
+ if ((n > big) || (n < 0)) {
(void) fprintf(stderr, "dd: %s \"%llu\"\n",
- gettext("argument out of range:"), n);
+ gettext("argument out of range:"), n);
exit(2);
}
return (n);
default:
(void) fprintf(stderr, "dd: %s \"%s\"\n",
- gettext("bad numeric argument:"), string);
+ gettext("bad numeric argument:"), string);
exit(2);
}
} /* never gets here */
@@ -1848,32 +1695,30 @@ long long big;
/* */
/* ******************************************************************** */
-static unsigned char
-*flsh()
+static unsigned char *
+flsh(void)
{
unsigned char *op, *cp;
int bc;
unsigned int oc;
- if (obc) /* don't flush if the buffer is empty */
- {
+ if (obc) { /* don't flush if the buffer is empty */
if (obc >= obs) {
oc = obs;
nofr++; /* count a full output buffer */
- }
- else
- {
+ } else {
oc = obc;
nopr++; /* count a partial output buffer */
}
bc = write(obf, (char *)obuf, oc);
if (bc != oc) {
- if (bc < 0)
+ if (bc < 0) {
perror("write");
- else
- (void) fprintf(stderr,
- gettext("dd: unexpected short write, "
- "wrote %d bytes, expected %d\n"), bc, oc);
+ } else {
+ (void) fprintf(stderr,
+ gettext("dd: unexpected short write, "
+ "wrote %d bytes, expected %d\n"), bc, oc);
+ }
term(2);
}
@@ -1913,8 +1758,7 @@ static unsigned char
/* ******************************************************************** */
static void
-term(c)
-int c;
+term(int c)
{
stats();
exit(c);
@@ -1925,23 +1769,24 @@ int c;
/* Write record statistics onto standard error */
/* */
/* Args: none */
-/* Global args: nifr, nipr, nofr, nopr, ntrunc */
+/* Global args: nifr, nipr, nofr, nopr, ntrunc, obytes */
/* */
/* Return: void */
/* */
/* ******************************************************************** */
static void
-stats()
+stats(void)
{
hrtime_t delta = gethrtime() - startt;
double secs = delta * 1e-9;
+ char nnum[NN_NUMBUF_SZ];
(void) fprintf(stderr, gettext("%llu+%llu records in\n"), nifr, nipr);
(void) fprintf(stderr, gettext("%llu+%llu records out\n"), nofr, nopr);
if (ntrunc) {
(void) fprintf(stderr,
- gettext("%llu truncated record(s)\n"), ntrunc);
+ gettext("%llu truncated record(s)\n"), ntrunc);
}
/*
@@ -1951,7 +1796,8 @@ stats()
if (startt == 0)
return;
+ nicenum((uint64_t)obytes / secs, nnum, sizeof (nnum));
(void) fprintf(stderr,
- gettext("%llu bytes transferred in %.6f secs (%.0f bytes/sec)\n"),
- obytes, secs, obytes / secs);
+ gettext("%llu bytes transferred in %.6f secs (%sB/sec)\n"),
+ obytes, secs, nnum);
}