diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/dd/misc.c | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/bin/dd/misc.c b/bin/dd/misc.c index 8153971d8f8..a0c20191137 100644 --- a/bin/dd/misc.c +++ b/bin/dd/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.22 2017/10/24 14:21:10 schwarze Exp $ */ +/* $OpenBSD: misc.c,v 1.23 2018/04/07 18:52:39 cheloha Exp $ */ /* $NetBSD: misc.c,v 1.4 1995/03/21 09:04:10 cgd Exp $ */ /*- @@ -36,13 +36,9 @@ #include <sys/types.h> #include <sys/time.h> -#include <sys/uio.h> -#include <err.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> #include <errno.h> +#include <stdio.h> #include <time.h> #include <unistd.h> @@ -53,10 +49,7 @@ void summary(void) { struct timespec elapsed, now; - char buf[4][100]; - struct iovec iov[4]; double nanosecs; - int i = 0; if (ddflags & C_NOINFO) return; @@ -67,38 +60,25 @@ summary(void) if (nanosecs == 0) nanosecs = 1; - /* Use snprintf(3) so that we don't reenter stdio(3). */ - (void)snprintf(buf[0], sizeof(buf[0]), - "%zu+%zu records in\n%zu+%zu records out\n", + /* Be async safe: use dprintf(3). */ + dprintf(STDERR_FILENO, "%zu+%zu records in\n%zu+%zu records out\n", st.in_full, st.in_part, st.out_full, st.out_part); - iov[i].iov_base = buf[0]; - iov[i++].iov_len = strlen(buf[0]); if (st.swab) { - (void)snprintf(buf[1], sizeof(buf[1]), - "%zu odd length swab %s\n", - st.swab, (st.swab == 1) ? "block" : "blocks"); - iov[i].iov_base = buf[1]; - iov[i++].iov_len = strlen(buf[1]); + dprintf(STDERR_FILENO, "%zu odd length swab %s\n", + st.swab, (st.swab == 1) ? "block" : "blocks"); } if (st.trunc) { - (void)snprintf(buf[2], sizeof(buf[2]), - "%zu truncated %s\n", - st.trunc, (st.trunc == 1) ? "block" : "blocks"); - iov[i].iov_base = buf[2]; - iov[i++].iov_len = strlen(buf[2]); + dprintf(STDERR_FILENO, "%zu truncated %s\n", + st.trunc, (st.trunc == 1) ? "block" : "blocks"); } if (!(ddflags & C_NOXFER)) { - (void)snprintf(buf[3], sizeof(buf[3]), + dprintf(STDERR_FILENO, "%lld bytes transferred in %lld.%03ld secs " "(%0.0f bytes/sec)\n", (long long)st.bytes, (long long)elapsed.tv_sec, elapsed.tv_nsec / 1000000, ((double)st.bytes * 1000000000) / nanosecs); - iov[i].iov_base = buf[3]; - iov[i++].iov_len = strlen(buf[3]); } - - (void)writev(STDERR_FILENO, iov, i); } void |