X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ffunctional%2Fsetjmp.c;h=adba1a68be5a44427ac586aa92e1e8511957cc6a;hb=4f5020522165cf4032a3e5d4d29baf91b581499d;hp=db8251161efa4c55860860a0c14855b53157fe46;hpb=54877ffbe9d9a558db7052794effc42c046c6333;p=libc-test diff --git a/src/functional/setjmp.c b/src/functional/setjmp.c index db82511..adba1a6 100644 --- a/src/functional/setjmp.c +++ b/src/functional/setjmp.c @@ -3,7 +3,7 @@ #include #include "test.h" -#define TEST(c, ...) ((c) ? 1 : (error(#c" failed: " __VA_ARGS__),0)) +#define TEST(c, ...) ((c) ? 1 : (t_error(#c" failed: " __VA_ARGS__),0)) int main(void) { @@ -46,5 +46,20 @@ int main(void) sigprocmask(SIG_SETMASK, &set, &set); TEST(sigismember(&set, SIGUSR1)==0, "siglongjmp failed to restore mask\n"); - return test_status; + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + sigprocmask(SIG_UNBLOCK, &set, &set); + oldset = set; + + if (!sigsetjmp(sjb, 0)) { + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + sigprocmask(SIG_BLOCK, &set, 0); + siglongjmp(sjb, 1); + } + set = oldset; + sigprocmask(SIG_SETMASK, &set, &set); + TEST(sigismember(&set, SIGUSR1)==1, "siglongjmp incorrectly restored mask\n"); + + return t_status; }