]> rtime.felk.cvut.cz Git - linux-conf-perf.git/blob - kconfig2sat/picosat-960/main.c
Integrate PicoSAT to kconfig2sat
[linux-conf-perf.git] / kconfig2sat / picosat-960 / main.c
1 #include <signal.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "picosat.h"
6
7 int picosat_main (PicoSAT **, int, char **);
8
9 static PicoSAT * ps;
10 static int catched;
11
12 static void (*sig_int_handler);
13 static void (*sig_segv_handler);
14 static void (*sig_abrt_handler);
15 static void (*sig_term_handler);
16 #ifndef NALLSIGNALS
17 static void (*sig_kill_handler);
18 static void (*sig_xcpu_handler);
19 static void (*sig_xfsz_handler);
20 #endif
21
22 static void
23 resetsighandlers (void)
24 {
25   (void) signal (SIGINT, sig_int_handler);
26   (void) signal (SIGSEGV, sig_segv_handler);
27   (void) signal (SIGABRT, sig_abrt_handler);
28   (void) signal (SIGTERM, sig_term_handler);
29 #ifndef NALLSIGNALS
30   (void) signal (SIGKILL, sig_kill_handler);
31   (void) signal (SIGXCPU, sig_xcpu_handler);
32   (void) signal (SIGXFSZ, sig_xfsz_handler);
33 #endif
34 }
35
36 static void
37 message (int sig)
38 {
39   picosat_message (ps, 1, "");
40   picosat_message (ps, 1, "*** CAUGHT SIGNAL %d ***", sig);
41   picosat_message (ps, 1, "");
42 }
43
44 static void
45 catch (int sig)
46 {
47   if (!catched)
48     {
49       message (sig);
50       catched = 1;
51       picosat_stats (ps);
52       message (sig);
53     }
54
55   resetsighandlers ();
56   raise (sig);
57 }
58
59 static void
60 setsighandlers (void)
61 {
62   sig_int_handler = signal (SIGINT, catch);
63   sig_segv_handler = signal (SIGSEGV, catch);
64   sig_abrt_handler = signal (SIGABRT, catch);
65   sig_term_handler = signal (SIGTERM, catch);
66 #ifndef NALLSIGNALS
67   sig_kill_handler = signal (SIGKILL, catch);
68   sig_xcpu_handler = signal (SIGXCPU, catch);
69   sig_xfsz_handler = signal (SIGXFSZ, catch);
70 #endif
71 }
72
73 int
74 main (int argc, char **argv)
75 {
76   int res, verbose;
77
78   for (verbose = argc - 1; verbose; verbose--)
79     if (!strcmp (argv[verbose], "-v"))
80       break;
81
82   if (verbose)
83     setsighandlers ();
84
85   res = picosat_main (&ps, argc, argv);
86
87   if (verbose)
88     resetsighandlers ();
89
90   return res;
91 }