diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-05 15:20:10 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-05 15:20:10 +0200 |
commit | 9fd61be191caf78138a50e9d6a465b39318f91c3 (patch) | |
tree | afb9f5f8874dda32d984496ba433b95d03b5ce18 | |
parent | 76787a7e025fb4a8b83e29b2fbfdca8d5bd492b9 (diff) | |
download | busybox-9fd61be191caf78138a50e9d6a465b39318f91c3.tar.gz |
libbb/xwrite: print errno on "short write" errors
Lauri Kasanen:
:: Over at TinyCore, we receive a huge number of questions of the type "I
:: got "short write", what does it mean?". Mostly for the rpi port and when
:: using bb wget.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/xfuncs_printf.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index e9222f690..1b11caf6b 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c @@ -235,8 +235,16 @@ void FAST_FUNC xwrite(int fd, const void *buf, size_t count) { if (count) { ssize_t size = full_write(fd, buf, count); - if ((size_t)size != count) - bb_error_msg_and_die("short write"); + if ((size_t)size != count) { + /* + * Two cases: write error immediately; + * or some writes succeeded, then we hit an error. + * In either case, errno is set. + */ + bb_perror_msg_and_die( + size >= 0 ? "short write" : "write error" + ); + } } } void FAST_FUNC xwrite_str(int fd, const char *str) |