29 lines
596 B
C
29 lines
596 B
C
/* 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;
|
|
}
|