--- busybox-1.20.2.org/coreutils/dd.c 2013-12-03 14:35:40.266370758 +0100 +++ busybox-1.20.2/coreutils/dd.c 2013-12-03 14:42:07.766377990 +0100 @@ -9,13 +9,14 @@ */ //usage:#define dd_trivial_usage -//usage: "[if=FILE] [of=FILE] " IF_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N]\n" +//usage: "[if=FILE] [of=FILE] " IF_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N] [verbose=N]\n" //usage: " [seek=N]" IF_FEATURE_DD_IBS_OBS(" [conv=notrunc|noerror|sync|fsync]") //usage:#define dd_full_usage "\n\n" //usage: "Copy a file with converting and formatting\n" //usage: "\n if=FILE Read from FILE instead of stdin" //usage: "\n of=FILE Write to FILE instead of stdout" //usage: "\n bs=N Read and write N bytes at a time" +//usage: "\n verbose=N print out progress every N blocks" //usage: IF_FEATURE_DD_IBS_OBS( //usage: "\n ibs=N Read N bytes at a time" //usage: ) @@ -160,7 +161,7 @@ FLAG_COUNT = 1 << 5, }; static const char keywords[] ALIGN1 = - "bs\0""count\0""seek\0""skip\0""if\0""of\0" + "bs\0""count\0""seek\0""skip\0""if\0""of\0""verbose\0" #if ENABLE_FEATURE_DD_IBS_OBS "ibs\0""obs\0""conv\0" #endif @@ -176,6 +177,7 @@ OP_skip, OP_if, OP_of, + OP_verbose, #if ENABLE_FEATURE_DD_IBS_OBS OP_ibs, OP_obs, @@ -209,6 +211,7 @@ size_t oc; off_t count; off_t seek, skip; + int verbose; const char *infile, *outfile; } Z; #define flags (Z.flags ) @@ -216,6 +219,7 @@ #define count (Z.count ) #define seek (Z.seek ) #define skip (Z.skip ) +#define verbose (Z.verbose) #define infile (Z.infile ) #define outfile (Z.outfile) @@ -292,6 +296,10 @@ skip = XATOU_SFX(val, dd_suffixes); /*continue;*/ } + if (what == OP_verbose) { + verbose = XATOU_SFX(val, dd_suffixes); fprintf(stderr, "progress output active\n"); + /*continue;*/ + } if (what == OP_if) { infile = val; /*continue;*/ @@ -364,6 +372,10 @@ n = safe_read(ifd, ibuf, ibs); if (n == 0) break; + + if(verbose && (((G.in_full + G.in_part) % verbose) == 0)) { + fprintf(stderr, "\r%6d block copied\r", (unsigned int)(G.in_full + G.in_part)); + } if (n < 0) { /* "Bad block" */ if (!(flags & FLAG_NOERROR))