/*
 * This program is a sample of how to catch segmentation fault when it happen
 */

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <bits/siginfo.h>

char *buffer;
int sig=0;

void signal_handler(int numsiginfo_t *infovoid *foo) {
        //The segfault is on invalid buffer, so we transform it into something valid
        buffer=malloc(5);
        //If we have enough informations, say where the segfault happens
        if(info && num==SIGSEGV) {
                printf("PAN sur %p\n"info->si_addr);  
        }
        //Manage pending signals
        sigset_t segv,pending;
        sigpending(&pending);
        sigaddset(&segvSIGSEGV);
        //sigsuspend(&segv);
        sigrelse(11);
}

int main() {
        struct sigaction action;
        action.sa_sigaction=signal_handler;
        action.sa_flags=SA_SIGINFO;
        sigfillset(&action.sa_mask);
        sigaction(11, &actionNULL);
        //Now let's have a segfault
        buffer=(void*)0x5152;
        buffer[0]=0;
        printf("PAN PAN PAN\n");
        return 0;
}