X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=7a4dacd2138ca52eff63e338ddf255d893e516ef;hb=be8f4e9e8eb3b0c34a49c2e80a5c5b7dc6d175f0;hp=17b0ae16cf8398566abd1a9769624bec4aa1a172;hpb=93f1a06374e335e8508d89e1bdaadf45be6ab777;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index 17b0ae16c..7a4dacd21 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -1377,17 +1377,21 @@ bool ignore_file(const char *filename) { } int fd_nonblock(int fd, bool nonblock) { - int flags; + int flags, nflags; assert(fd >= 0); - if ((flags = fcntl(fd, F_GETFL, 0)) < 0) + flags = fcntl(fd, F_GETFL, 0); + if (flags < 0) return -errno; if (nonblock) - flags |= O_NONBLOCK; + nflags = flags | O_NONBLOCK; else - flags &= ~O_NONBLOCK; + nflags = flags & ~O_NONBLOCK; + + if (nflags == flags) + return 0; if (fcntl(fd, F_SETFL, flags) < 0) return -errno; @@ -1396,17 +1400,21 @@ int fd_nonblock(int fd, bool nonblock) { } int fd_cloexec(int fd, bool cloexec) { - int flags; + int flags, nflags; assert(fd >= 0); - if ((flags = fcntl(fd, F_GETFD, 0)) < 0) + flags = fcntl(fd, F_GETFD, 0); + if (flags < 0) return -errno; if (cloexec) - flags |= FD_CLOEXEC; + nflags = flags | FD_CLOEXEC; else - flags &= ~FD_CLOEXEC; + nflags = flags & ~FD_CLOEXEC; + + if (nflags == flags) + return 0; if (fcntl(fd, F_SETFD, flags) < 0) return -errno; @@ -6480,8 +6488,7 @@ void hexdump(FILE *f, const void *p, size_t s) { } } -int update_reboot_param_file(const char *param) -{ +int update_reboot_param_file(const char *param) { int r = 0; if (param) {