summaryrefslogtreecommitdiffstats
path: root/bin/dd
diff options
context:
space:
mode:
authorasomers <asomers@FreeBSD.org>2014-05-08 19:10:04 +0000
committerasomers <asomers@FreeBSD.org>2014-05-08 19:10:04 +0000
commit5bd695fd9651dd452406074cf2dbaa39e49ccba6 (patch)
tree89c0164df08937129faf83adb970f8445406bbae /bin/dd
parentcf46da7b9b56863c03d08e14aa2ed5a575cb0462 (diff)
downloadFreeBSD-src-5bd695fd9651dd452406074cf2dbaa39e49ccba6.zip
FreeBSD-src-5bd695fd9651dd452406074cf2dbaa39e49ccba6.tar.gz
Incorporate feedback from bde and jilles regarding r265472 to dd(1).
* Don't use sysexits.h. Just exit 1 on error and 0 otherwise. * Don't sacrifice precision by converting the output of clock_gettime() to a double and then comparing the results. Instead, subtract the values of the two clock_gettime() calls, then convert to double. * Don't use CLOCK_MONOTONIC_PRECISE. It's an unportable synonym for CLOCK_MONOTONIC. * Use more appropriate names for some local variables. * In the summary message, round elapsed time to the nearest microsecond. Reported by: bde, jilles MFC after: 3 days X-MFC-With: 265472
Diffstat (limited to 'bin/dd')
-rw-r--r--bin/dd/dd.c7
-rw-r--r--bin/dd/dd.h2
-rw-r--r--bin/dd/misc.c18
3 files changed, 12 insertions, 15 deletions
diff --git a/bin/dd/dd.c b/bin/dd/dd.c
index 6b4b4f0..8ae11a7 100644
--- a/bin/dd/dd.c
+++ b/bin/dd/dd.c
@@ -61,7 +61,6 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sysexits.h>
#include <time.h>
#include <unistd.h>
@@ -126,7 +125,6 @@ static void
setup(void)
{
u_int cnt;
- struct timespec tv;
if (in.name == NULL) {
in.name = "stdin";
@@ -245,9 +243,8 @@ setup(void)
ctab = casetab;
}
- if (clock_gettime(CLOCK_MONOTONIC_PRECISE, &tv))
- err(EX_OSERR, "clock_gettime");
- st.start = tv.tv_sec + tv.tv_nsec * 1.0e-9;
+ if (clock_gettime(CLOCK_MONOTONIC, &st.start))
+ err(1, "clock_gettime");
}
static void
diff --git a/bin/dd/dd.h b/bin/dd/dd.h
index d2fa410..a8b45e5 100644
--- a/bin/dd/dd.h
+++ b/bin/dd/dd.h
@@ -64,7 +64,7 @@ typedef struct {
uintmax_t trunc; /* # of truncated records */
uintmax_t swab; /* # of odd-length swab blocks */
uintmax_t bytes; /* # of bytes written */
- double start; /* start time of dd */
+ struct timespec start; /* start time of dd */
} STAT;
/* Flags (in ddflags). */
diff --git a/bin/dd/misc.c b/bin/dd/misc.c
index 0d8da70..eb1227b 100644
--- a/bin/dd/misc.c
+++ b/bin/dd/misc.c
@@ -48,7 +48,6 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sysexits.h>
#include <time.h>
#include <unistd.h>
@@ -58,18 +57,19 @@ __FBSDID("$FreeBSD$");
void
summary(void)
{
- struct timespec tv, tv_res;
+ struct timespec end, ts_res;
double secs, res;
if (ddflags & C_NOINFO)
return;
- if (clock_gettime(CLOCK_MONOTONIC_PRECISE, &tv))
- err(EX_OSERR, "clock_gettime");
- if (clock_getres(CLOCK_MONOTONIC_PRECISE, &tv_res))
- err(EX_OSERR, "clock_getres");
- secs = tv.tv_sec + tv.tv_nsec * 1.0e-9 - st.start;
- res = tv_res.tv_sec + tv_res.tv_nsec * 1.0e-9;
+ if (clock_gettime(CLOCK_MONOTONIC, &end))
+ err(1, "clock_gettime");
+ if (clock_getres(CLOCK_MONOTONIC, &ts_res))
+ err(1, "clock_getres");
+ secs = (end.tv_sec - st.start.tv_sec) + \
+ (end.tv_nsec - st.start.tv_nsec) * 1e-9;
+ res = ts_res.tv_sec + ts_res.tv_nsec * 1e-9;
if (secs < res)
secs = res;
(void)fprintf(stderr,
@@ -83,7 +83,7 @@ summary(void)
st.trunc, (st.trunc == 1) ? "block" : "blocks");
if (!(ddflags & C_NOXFER)) {
(void)fprintf(stderr,
- "%ju bytes transferred in %.9f secs (%.0f bytes/sec)\n",
+ "%ju bytes transferred in %.6f secs (%.0f bytes/sec)\n",
st.bytes, secs, st.bytes / secs);
}
need_summary = 0;
OpenPOWER on IntegriCloud