include: add close_fd() for noticing write errors before close()

Essentially this helper function is similar to close_stream(), but for
file descriptors.

When a file descriptors are close()'d status of write is often
overlooked.  The close_fd() will try to determine what happen to writes
with fsync() before closing the file descriptor.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2013-04-13 20:54:44 +01:00 committed by Karel Zak
parent 8d21d9ab8f
commit f416563b28
1 changed files with 19 additions and 0 deletions

View File

@ -48,4 +48,23 @@ close_stdout(void)
_exit(EXIT_FAILURE);
}
#ifndef HAVE_FSYNC
static inline int
fsync(int fd __attribute__((__unused__)))
{
return 0;
}
#endif
static inline int
close_fd(int fd)
{
const int fsync_fail = (fsync(fd) != 0);
const int close_fail = (close(fd) != 0);
if (fsync_fail || close_fail)
return EOF;
return 0;
}
#endif /* UTIL_LINUX_CLOSESTREAM_H */