blob: 627ea03eef483e45673844a39f42934be085b61f [file] [log] [blame]
/*
* Copyright (c) 2002, Intel Corporation. All rights reserved.
* Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com
* This file is licensed under the GPL license. For the full content
* of this license, see the COPYING file at the top level of this
* source tree.
* Test that the sigpending() function stores the set of signals that
* are blocked from delivery. Steps are:
* 1) Block three signals from delivery.
* 2) Raise two of those signals.
* 3) Verify that the two signals raised are shown via sigpending.
* 4) Verify the one signal not raised is not shown.
*/
#include <signal.h>
#include <stdio.h>
#include "posixtest.h"
int main()
{
sigset_t blockset;
sigset_t prevset;
sigset_t pendingset;
if ( (sigemptyset(&blockset) == -1) ||
(sigemptyset(&prevset) == -1) ||
(sigemptyset(&pendingset) == -1) ) {
printf("Could not call sigemptyset()\n");
return PTS_UNRESOLVED;
}
if ( (sigaddset(&blockset, SIGALRM) == -1) ||
(sigaddset(&blockset, SIGHUP) == -1) ||
(sigaddset(&blockset, SIGQUIT) == -1) ) {
perror("Error calling sigaddset()");
return PTS_UNRESOLVED;
}
if (sigprocmask(SIG_SETMASK, &blockset, &prevset) == -1) {
printf("Could not call sigprocmask()\n");
return PTS_UNRESOLVED;
}
if (raise(SIGALRM) != 0) {
printf("Could not raise SIGALRM\n");
return PTS_UNRESOLVED;
}
if (raise(SIGQUIT) != 0) {
printf("Could not raise SIGQUIT\n");
return PTS_UNRESOLVED;
}
if (sigpending(&pendingset) == -1) {
printf("Error calling sigpending()\n");
return PTS_UNRESOLVED;
}
if (sigismember(&pendingset, SIGALRM) == 1) {
if (sigismember(&pendingset, SIGQUIT) == 1) {
printf("All pending signals found\n");
if (sigismember(&pendingset, SIGHUP) == 0) {
printf("Unsent signals not found.\n");
printf("Test PASSED\n");
return PTS_PASS;
} else {
printf("Error with unsent signals\n");
printf("Test FAILED\n");
return PTS_FAIL;
}
}
}
printf("Not all pending signals found\n");
return PTS_FAIL;
}