/* 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; | |
} |