about summary refs log tree commit diff
path: root/src/libnm-std-aux
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2021-08-25 15:24:42 +0200
committerSebastien Bacher <seb128@ubuntu.com>2021-08-25 15:24:42 +0200
commitdbb91282fa488964fb20595f9494a9f0e4f36a58 (patch)
tree142bc942e5320b35514cdf03a5f9f47a9b89df0e /src/libnm-std-aux
parent5f2ede3a2813b0e9204befdcfc67509d34be71c6 (diff)
parentcfb80376641fa49137b9996130352697e7f8b436 (diff)
Update upstream source from tag 'upstream/1.32.10'
Update to upstream version '1.32.10'
with Debian dir fcf2778b50b013ede3e7375bc1d829e984175658
Diffstat (limited to 'src/libnm-std-aux')
-rw-r--r--src/libnm-std-aux/nm-std-aux.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/libnm-std-aux/nm-std-aux.h b/src/libnm-std-aux/nm-std-aux.h
index b153866f..17b26881 100644
--- a/src/libnm-std-aux/nm-std-aux.h
+++ b/src/libnm-std-aux/nm-std-aux.h
@@ -695,16 +695,22 @@ nm_close(int fd)
 NM_AUTO_DEFINE_FCN_VOID0(void *, _nm_auto_free_impl, free);
 #define nm_auto_free nm_auto(_nm_auto_free_impl)
 
+static inline void
+_nm_auto_protect_errno(const int *p_saved_errno)
+{
+    errno = *p_saved_errno;
+}
+#define NM_AUTO_PROTECT_ERRNO(errsv_saved) \
+    nm_auto(_nm_auto_protect_errno) _nm_unused const int errsv_saved = (errno)
+
 /*****************************************************************************/
 
 static inline void
 _nm_auto_close(int *pfd)
 {
     if (*pfd >= 0) {
-        int errsv = errno;
-
+        NM_AUTO_PROTECT_ERRNO(errsv);
         (void) nm_close(*pfd);
-        errno = errsv;
     }
 }
 #define nm_auto_close nm_auto(_nm_auto_close)
@@ -713,10 +719,8 @@ static inline void
 _nm_auto_fclose(FILE **pfd)
 {
     if (*pfd) {
-        int errsv = errno;
-
+        NM_AUTO_PROTECT_ERRNO(errsv);
         (void) fclose(*pfd);
-        errno = errsv;
     }
 }
 #define nm_auto_fclose nm_auto(_nm_auto_fclose)