diff options
| author | Michele Bini <rev@alienbuntu.local> | 2019-04-18 22:12:22 (GMT) |
|---|---|---|
| committer | Michele Bini <rev@alienbuntu.local> | 2019-04-18 22:13:11 (GMT) |
| commit | 3567ae383ea8d19f054ba138c8250446cc4a8bb1 (patch) | |
| tree | d7d23be597c2ffb7176fbaa511050a067947a62f /safe_write.c | |
| parent | da7ba579a7d9a95457f87bc5389a53b12d6fc9cb (diff) | |
.
Diffstat (limited to 'safe_write.c')
| -rw-r--r-- | safe_write.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/safe_write.c b/safe_write.c new file mode 100644 index 0000000..aad50f5 --- /dev/null +++ b/safe_write.c @@ -0,0 +1,29 @@ +/* vi: set sw=4 ts=4: */ +/* + * Utility routines. + * + * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> + * + * Licensed under GPLv2 or later, see file LICENSE in this source tree. + */ + +#include "libbb.h" + +ssize_t FAST_FUNC safe_write(int fd, const void *buf, size_t count) +{ + ssize_t n; + + for (;;) { + n = write(fd, buf, count); + if (n >= 0 || errno != EINTR) + break; + /* Some callers set errno=0, are upset when they see EINTR. + * Returning EINTR is wrong since we retry write(), + * the "error" was transient. + */ + errno = 0; + /* repeat the write() */ + } + + return n; +} |
