diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-09-09 15:20:10 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-09-09 15:26:11 +0200 |
commit | 74ca738f6a01fb5fc19c5c3899f5cb1fdc1d7f68 (patch) | |
tree | 920d0abca454976756296d982d1cb9ef794e1ade /src/basic/util.c | |
parent | 9c00a6adfa6c2ded071222b2ec76295480add34e (diff) |
util: introduce safe_fclose() and port everything over to it
Adds a coccinelle script to port things over automatically.
Diffstat (limited to 'src/basic/util.c')
-rw-r--r-- | src/basic/util.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/basic/util.c b/src/basic/util.c index 3e41e6ad41..f7b2edf88c 100644 --- a/src/basic/util.c +++ b/src/basic/util.c @@ -327,6 +327,33 @@ void close_many(const int fds[], unsigned n_fd) { safe_close(fds[i]); } +int fclose_nointr(FILE *f) { + assert(f); + + /* Same as close_nointr(), but for fclose() */ + + if (fclose(f) == 0) + return 0; + + if (errno == EINTR) + return 0; + + return -errno; +} + +FILE* safe_fclose(FILE *f) { + + /* Same as safe_close(), but for fclose() */ + + if (f) { + PROTECT_ERRNO; + + assert_se(fclose_nointr(f) != EBADF); + } + + return NULL; +} + int unlink_noerrno(const char *path) { PROTECT_ERRNO; int r; |