10dc076565f772bb1953209fb69ea150b494aaa40robbiew/* 20dc076565f772bb1953209fb69ea150b494aaa40robbiew* Copyright (c) 2005, Bull S.A.. All rights reserved. 30dc076565f772bb1953209fb69ea150b494aaa40robbiew* Created by: Sebastien Decugis 45f3786942119704d17da876239c71a125985beccCyril Hrubis* Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz> 55f3786942119704d17da876239c71a125985beccCyril Hrubis* 60dc076565f772bb1953209fb69ea150b494aaa40robbiew* This program is free software; you can redistribute it and/or modify it 70dc076565f772bb1953209fb69ea150b494aaa40robbiew* under the terms of version 2 of the GNU General Public License as 80dc076565f772bb1953209fb69ea150b494aaa40robbiew* published by the Free Software Foundation. 90dc076565f772bb1953209fb69ea150b494aaa40robbiew* 100dc076565f772bb1953209fb69ea150b494aaa40robbiew* This program is distributed in the hope that it would be useful, but 110dc076565f772bb1953209fb69ea150b494aaa40robbiew* WITHOUT ANY WARRANTY; without even the implied warranty of 120dc076565f772bb1953209fb69ea150b494aaa40robbiew* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 130dc076565f772bb1953209fb69ea150b494aaa40robbiew* 140dc076565f772bb1953209fb69ea150b494aaa40robbiew* You should have received a copy of the GNU General Public License along 15fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao* with this program; if not, write the Free Software Foundation, Inc., 16fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 175f3786942119704d17da876239c71a125985beccCyril Hrubis* 180dc076565f772bb1953209fb69ea150b494aaa40robbiew* This sample test aims to check the following assertions: 190dc076565f772bb1953209fb69ea150b494aaa40robbiew* 202c28215423293e443469a07ae7011135d058b671Garrett Cooper* If SA_SIGINFO is not set in sa_flags, sa_handler is used as the signal 210dc076565f772bb1953209fb69ea150b494aaa40robbiew* handling function. 225f3786942119704d17da876239c71a125985beccCyril Hrubis* 230dc076565f772bb1953209fb69ea150b494aaa40robbiew* The steps are: 240dc076565f772bb1953209fb69ea150b494aaa40robbiew* -> register a handler for SIGXFSZ without SA_SIGINFO, and a known function 255f3786942119704d17da876239c71a125985beccCyril Hrubis* as sa_handler 260dc076565f772bb1953209fb69ea150b494aaa40robbiew* -> raise SIGXFSZ, and check the function has been called. 275f3786942119704d17da876239c71a125985beccCyril Hrubis* 280dc076565f772bb1953209fb69ea150b494aaa40robbiew* The test fails if the function is not called 290dc076565f772bb1953209fb69ea150b494aaa40robbiew*/ 300dc076565f772bb1953209fb69ea150b494aaa40robbiew 310dc076565f772bb1953209fb69ea150b494aaa40robbiew/* We are testing conformance to IEEE Std 1003.1, 2003 Edition */ 320dc076565f772bb1953209fb69ea150b494aaa40robbiew#define _POSIX_C_SOURCE 200112L 330dc076565f772bb1953209fb69ea150b494aaa40robbiew 340dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <pthread.h> 350dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdarg.h> 360dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h> 370dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdlib.h> 380dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <string.h> 390dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <unistd.h> 400dc076565f772bb1953209fb69ea150b494aaa40robbiew 410dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <signal.h> 420dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <errno.h> 430dc076565f772bb1953209fb69ea150b494aaa40robbiew 445f3786942119704d17da876239c71a125985beccCyril Hrubis#include "posixtest.h" 455f3786942119704d17da876239c71a125985beccCyril Hrubis 462d2b94348a482ca608886ffab9f83148244bccfcCyril Hrubisstatic volatile sig_atomic_t called = 0; 475f3786942119704d17da876239c71a125985beccCyril Hrubis 485f3786942119704d17da876239c71a125985beccCyril Hrubisstatic void handler() 490dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 500dc076565f772bb1953209fb69ea150b494aaa40robbiew called = 1; 510dc076565f772bb1953209fb69ea150b494aaa40robbiew} 520dc076565f772bb1953209fb69ea150b494aaa40robbiew 534ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void) 540dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 550dc076565f772bb1953209fb69ea150b494aaa40robbiew int ret; 560dc076565f772bb1953209fb69ea150b494aaa40robbiew struct sigaction sa; 570dc076565f772bb1953209fb69ea150b494aaa40robbiew 580dc076565f772bb1953209fb69ea150b494aaa40robbiew /* Set the signal handler */ 590dc076565f772bb1953209fb69ea150b494aaa40robbiew sa.sa_flags = 0; 600dc076565f772bb1953209fb69ea150b494aaa40robbiew sa.sa_handler = handler; 61e9410dfd93b8e415ecbe3f7e09a085462b27836eGarrett Cooper ret = sigemptyset(&sa.sa_mask); 620dc076565f772bb1953209fb69ea150b494aaa40robbiew 63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret != 0) { 645f3786942119704d17da876239c71a125985beccCyril Hrubis perror("Failed to empty signal set"); 655f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_UNRESOLVED; 660dc076565f772bb1953209fb69ea150b494aaa40robbiew } 670dc076565f772bb1953209fb69ea150b494aaa40robbiew 680dc076565f772bb1953209fb69ea150b494aaa40robbiew /* Install the signal handler for SIGXFSZ */ 695f3786942119704d17da876239c71a125985beccCyril Hrubis ret = sigaction(SIGXFSZ, &sa, 0); 700dc076565f772bb1953209fb69ea150b494aaa40robbiew 71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret != 0) { 725f3786942119704d17da876239c71a125985beccCyril Hrubis perror("Failed to set signal handler"); 735f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_UNRESOLVED; 740dc076565f772bb1953209fb69ea150b494aaa40robbiew } 750dc076565f772bb1953209fb69ea150b494aaa40robbiew 76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (called) { 775f3786942119704d17da876239c71a125985beccCyril Hrubis fprintf(stderr, 785f3786942119704d17da876239c71a125985beccCyril Hrubis "The signal handler has been called before signal was raised"); 795f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_FAIL; 800dc076565f772bb1953209fb69ea150b494aaa40robbiew } 810dc076565f772bb1953209fb69ea150b494aaa40robbiew 825f3786942119704d17da876239c71a125985beccCyril Hrubis ret = raise(SIGXFSZ); 830dc076565f772bb1953209fb69ea150b494aaa40robbiew 84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret != 0) { 855f3786942119704d17da876239c71a125985beccCyril Hrubis perror("Failed to raise SIGXFSZ"); 865f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_UNRESOLVED; 870dc076565f772bb1953209fb69ea150b494aaa40robbiew } 880dc076565f772bb1953209fb69ea150b494aaa40robbiew 89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (!called) { 905f3786942119704d17da876239c71a125985beccCyril Hrubis fprintf(stderr, "The sa_handler was not called\n"); 915f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_FAIL; 920dc076565f772bb1953209fb69ea150b494aaa40robbiew } 930dc076565f772bb1953209fb69ea150b494aaa40robbiew 945f3786942119704d17da876239c71a125985beccCyril Hrubis printf("Test PASSED\n"); 950dc076565f772bb1953209fb69ea150b494aaa40robbiew 965f3786942119704d17da876239c71a125985beccCyril Hrubis return PTS_PASS; 97ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 98