dd is on the ramdisks, have you tested them at all?
On 2011/10/19 21:12, Thomas Pfaff wrote: > This adds a new option disp that can be set to "human" for a more human- > readable completion message. This does not change the current behavior. > > $ dd if=/dev/zero of=/tmp/kthxbye bs=1337K count=42 disp=human > 42+0 records in > 42+0 records out > 57501696 bytes (54.8MB) transferred in 0.161 seconds (340MB/s) > > $ dd if=/dev/zero of=/tmp/kthxbye bs=1337K count=42 > 42+0 records in > 42+0 records out > 57501696 bytes transferred in 0.138 secs (415847262 bytes/sec) > > You can add disp=legacy if you one day should decide to make disp=human > the default (yah). Simple modification to scripts to keep them working. > > I know you're all thrilled seeing yet another dd diff from me, but rest > assured; this is the last one ... for now ;-) > > So, if anyone is interested: > > Index: Makefile > =================================================================== > RCS file: /cvs/src/bin/dd/Makefile,v > retrieving revision 1.5 > diff -u -p -r1.5 Makefile > --- Makefile 29 May 1998 04:34:20 -0000 1.5 > +++ Makefile 19 Oct 2011 18:50:31 -0000 > @@ -2,5 +2,7 @@ > > PROG= dd > SRCS= args.c conv.c conv_tab.c dd.c misc.c position.c > +DPADD= ${LIBUTIL} > +LDADD= -lutil > > .include <bsd.prog.mk> > Index: args.c > =================================================================== > RCS file: /cvs/src/bin/dd/args.c,v > retrieving revision 1.19 > diff -u -p -r1.19 args.c > --- args.c 18 Oct 2011 09:37:35 -0000 1.19 > +++ args.c 19 Oct 2011 18:50:31 -0000 > @@ -53,6 +53,7 @@ static void f_bs(char *); > static void f_cbs(char *); > static void f_conv(char *); > static void f_count(char *); > +static void f_disp(char *); > static void f_files(char *); > static void f_ibs(char *); > static void f_if(char *); > @@ -72,6 +73,7 @@ static const struct arg { > { "cbs", f_cbs, C_CBS, C_CBS }, > { "conv", f_conv, 0, 0 }, > { "count", f_count, C_COUNT, C_COUNT }, > + { "disp", f_disp, 0, 0 }, > { "files", f_files, C_FILES, C_FILES }, > { "ibs", f_ibs, C_IBS, C_BS|C_IBS }, > { "if", f_if, C_IF, C_IF }, > @@ -197,6 +199,14 @@ f_count(char *arg) > > if ((cpy_cnt = get_bsz(arg)) == 0) > cpy_cnt = (size_t)-1; > +} > + > +static void > +f_disp(char *arg) > +{ > + > + if ((disp_human = !strcmp(arg, "human")) != 1) > + errx(1, "%s: illegal value", "disp"); > } > > static void > Index: dd.1 > =================================================================== > RCS file: /cvs/src/bin/dd/dd.1,v > retrieving revision 1.25 > diff -u -p -r1.25 dd.1 > --- dd.1 18 Oct 2011 09:37:35 -0000 1.25 > +++ dd.1 19 Oct 2011 18:50:31 -0000 > @@ -137,6 +137,13 @@ Otherwise, input data is read and discar > For pipes, the correct number of bytes is read. > For all other devices, the correct number of blocks is read without > distinguishing between a partial or complete block being read. > +.It Cm disp= Ns Ar s > +If > +.Ar s > +is > +.Sq human > +the completion message will be displayed in a more human-readable format > +using the appropriate size suffixes. > .It Xo > .Sm off > .Cm conv= Ar value Oo , > @@ -371,6 +378,9 @@ specification. > .Pp > The > .Cm files > +operand, > +the > +.Cm disp > operand, > the conversions > .Cm oldascii , > Index: extern.h > =================================================================== > RCS file: /cvs/src/bin/dd/extern.h,v > retrieving revision 1.7 > diff -u -p -r1.7 extern.h > --- extern.h 25 Jun 2003 21:12:30 -0000 1.7 > +++ extern.h 19 Oct 2011 18:50:31 -0000 > @@ -57,6 +57,7 @@ extern STAT st; > extern void (*cfunc)(void); > extern size_t cpy_cnt; > extern size_t cbsz; > +extern int disp_human; > extern u_int ddflags; > extern size_t files_cnt; > extern const u_char *ctab; > Index: misc.c > =================================================================== > RCS file: /cvs/src/bin/dd/misc.c,v > retrieving revision 1.16 > diff -u -p -r1.16 misc.c > --- misc.c 27 Oct 2009 23:59:21 -0000 1.16 > +++ misc.c 19 Oct 2011 18:50:31 -0000 > @@ -45,10 +45,13 @@ > #include <errno.h> > #include <time.h> > #include <unistd.h> > +#include <util.h> > > #include "dd.h" > #include "extern.h" > > +int disp_human; > + > void > summary(void) > { > @@ -57,6 +60,7 @@ summary(void) > struct iovec iov[4]; > double microsecs; > int i = 0; > + char sizebuf[FMT_SCALED_STRSIZE], ratebuf[FMT_SCALED_STRSIZE]; > > (void)gettimeofday(&nowtv, (struct timezone *)NULL); > timersub(&nowtv, &st.startv, &nowtv); > @@ -85,10 +89,25 @@ summary(void) > iov[i].iov_base = buf[2]; > iov[i++].iov_len = strlen(buf[2]); > } > - (void)snprintf(buf[3], sizeof(buf[3]), > - "%qd bytes transferred in %ld.%03ld secs (%0.0f bytes/sec)\n", > - (long long)st.bytes, nowtv.tv_sec, nowtv.tv_usec / 1000, > - ((double)st.bytes * 1000000) / microsecs); > + > + if (disp_human) { > + strlcpy(sizebuf, "?", sizeof sizebuf); > + fmt_scaled(st.bytes, sizebuf); > + sizebuf[strcspn(sizebuf, "B")] = '\0'; > + > + strlcpy(ratebuf, "?", sizeof ratebuf); > + fmt_scaled(st.bytes * 1000000.0 / microsecs, ratebuf); > + ratebuf[strcspn(ratebuf, "B")] = '\0'; > + > + snprintf(buf[3], sizeof(buf[3]), "%qd bytes (%sB) transferred " > + "in %ld.%03ld seconds (%sB/s)\n", (long long)st.bytes, > + sizebuf, nowtv.tv_sec, nowtv.tv_usec / 1000, ratebuf); > + } else { > + snprintf(buf[3], sizeof(buf[3]), "%qd bytes transferred in " > + "%ld.%03ld secs (%0.0f bytes/sec)\n", (long long)st.bytes, > + nowtv.tv_sec, nowtv.tv_usec / 1000, > + ((double)st.bytes * 1000000) / microsecs); > + } > > iov[i].iov_base = buf[3]; > iov[i++].iov_len = strlen(buf[3]);