From 60f00508d39a16e9c9685e88beb19ecd1334c2c6 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Tue, 18 Sep 2018 08:34:06 -0600 Subject: [PATCH] Restore errno if trace_expr is successful --- src/macros.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index af896e76..a161da32 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -67,11 +67,25 @@ pub fn trace_error() -> (isize, &'static str) { macro_rules! trace_expr { ($expr:expr, $($arg:tt)*) => ({ trace!("{}", format_args!($($arg)*)); - unsafe { - ::platform::errno = 0; - } + + let old_errno = unsafe { ::platform::errno }; + unsafe { ::platform::errno = 0; } + let ret = $expr; - trace!("{} = {} {:?}", format_args!($($arg)*), ret, $crate::macros::trace_error()); + + let errno = unsafe { ::platform::errno } as isize; + if errno == 0 { + unsafe { ::platform::errno = old_errno; } + } + + let strerror = if errno >= 0 && errno < ::header::errno::STR_ERROR.len() as isize { + ::header::errno::STR_ERROR[errno as usize] + } else { + "Unknown error" + }; + + trace!("{} = {} ({}, {})", format_args!($($arg)*), ret, errno, strerror); + ret }); } -- GitLab