summaryrefslogtreecommitdiff
path: root/src/libnm-std-aux/nm-std-aux.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnm-std-aux/nm-std-aux.h')
-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 b153866fd8..17b268816d 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)