diff options
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; +} |
