* \param size The length of \a buf in bytes.
*
* This function writes out the given buffer and retries if an interrupt
- * occurred during the write.
+ * occurred during the write. The file descriptor is assumed to be in blocking
+ * mode (i.e., EAGAIN is treated as an error).
*
* \return Standard.
*
* \sa write(2).
*/
-ssize_t __write(int fd, const void *buf, size_t size)
+static ssize_t __write(int fd, const void *buf, size_t size)
{
ssize_t ret;
for (;;) {
ret = write(fd, buf, size);
- if ((ret < 0) && (errno == EAGAIN || errno == EINTR))
+ if (ret < 0 && errno == EINTR)
continue;
return ret >= 0? ret : -ERRNO_TO_ERROR(errno);
}
if (*dir)
return 1;
ret = -ERRNO_TO_ERROR(errno);
-/* Ignore return value of fchdir() and close(). We're busted anyway. */
- if (cwd)
- fchdir(*cwd);
+ /* Ignore return value of fchdir() and close(). We're busted anyway. */
+ if (cwd) {
+ int __a_unused ret2 = fchdir(*cwd); /* STFU, gcc */
+ }
close_cwd:
if (cwd)
close(*cwd);