1/* 2 * Copyright 2004, Axel D��rfler, axeld@pinc-software.de. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <setjmp.h> 8 9 10/** This function is called by sigsetjmp() only */ 11 12int __setjmp_save_sigs(jmp_buf buffer, int saveMask); 13 14int 15__setjmp_save_sigs(jmp_buf buffer, int saveMask) 16{ 17 // If the signal mask shall be saved, we save the inverted signal mask. The 18 // reason for this is that due to unblockable signals the inverted signal 19 // mask is never zero and thus we can use a zero value to indicate that the 20 // mask has not been saved. 21 sigset_t signalMask; 22 if (saveMask != 0 && sigprocmask(SIG_BLOCK, NULL, &signalMask) == 0) 23 buffer[0].inverted_signal_mask = ~signalMask; 24 else 25 buffer[0].inverted_signal_mask = 0; 26 27 return 0; 28} 29