"Fetching and setting the value of errno is async-signal-safe
provided that the signal handler saves errno on entry and
restores its value before returning."
save and restore errno on cases where it is needed.
}
#endif
+static inline void ul_reset_errno(int *saved_errno) {
+ if (*saved_errno < 0)
+ return;
+
+ errno = *saved_errno;
+}
+
+#define UL_PROTECT_ERRNO __attribute__((__cleanup__(ul_reset_errno))) \
+ __attribute__((__unused__)) int __ul_saved_errno = errno
#endif /* UTIL_LINUX_C_H */
static void wait_for_pager_signal(int signo)
{
+ UL_PROTECT_ERRNO;
wait_for_pager();
raise(signo);
}
*/
static void sighandler(int i)
{
+ UL_PROTECT_ERRNO;
if (last_signal != SIGINT)
last_signal = i;
if (i == SIGINT)
/* Signal handler while reading from input file. */
static void sighandler(int signum)
{
+ UL_PROTECT_ERRNO;
if (canjump && (signum == SIGINT || signum == SIGQUIT))
longjmp(jmpenv, signum);
tcsetattr(STDOUT_FILENO, TCSADRAIN, &otio);