| #ifndef UTIL_LINUX_CLOSESTREAM_H |
| #define UTIL_LINUX_CLOSESTREAM_H |
| __fpending(FILE *stream __attribute__((__unused__))) |
| close_stream(FILE * stream) |
| const int some_pending = (__fpending(stream) != 0); |
| const int prev_fail = (ferror(stream) != 0); |
| const int fclose_fail = (fclose(stream) != 0); |
| if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) { |
| /* Meant to be used atexit(close_stdout); */ |
| if (close_stream(stdout) != 0 && !(errno == EPIPE)) { |
| if (close_stream(stderr) != 0) |
| #endif /* UTIL_LINUX_CLOSESTREAM_H */ |