1*ca90fc32Smartynas /* $OpenBSD: floor.c,v 1.2 2011/07/09 03:33:07 martynas Exp $ */
2f59190d8Smickey
3f59190d8Smickey /* Written by Michael Shalayeff, 2003, Public domain. */
4f59190d8Smickey
5f59190d8Smickey #include <stdio.h>
6f59190d8Smickey #include <stdlib.h>
7f59190d8Smickey #include <string.h>
8f59190d8Smickey #include <signal.h>
9f59190d8Smickey #include <unistd.h>
10f59190d8Smickey #include <math.h>
11f59190d8Smickey
12f59190d8Smickey static void
sigfpe(int sig,siginfo_t * si,void * v)13f59190d8Smickey sigfpe(int sig, siginfo_t *si, void *v)
14f59190d8Smickey {
15f59190d8Smickey char buf[132];
16f59190d8Smickey
17f59190d8Smickey if (si) {
18f59190d8Smickey snprintf(buf, sizeof(buf), "sigfpe: addr=%p, code=%d\n",
19f59190d8Smickey si->si_addr, si->si_code);
20f59190d8Smickey write(1, buf, strlen(buf));
21f59190d8Smickey }
22f59190d8Smickey _exit(1);
23f59190d8Smickey }
24f59190d8Smickey
25f59190d8Smickey int
main(int argc,char * argv[])26f59190d8Smickey main(int argc, char *argv[])
27f59190d8Smickey {
28f59190d8Smickey struct sigaction sa;
29f59190d8Smickey
30f59190d8Smickey memset(&sa, 0, sizeof(sa));
31f59190d8Smickey sa.sa_sigaction = sigfpe;
32f59190d8Smickey sa.sa_flags = SA_SIGINFO;
33f59190d8Smickey sigaction(SIGFPE, &sa, NULL);
34f59190d8Smickey
35f59190d8Smickey if (floor(4294967295.7) != 4294967295.)
36f59190d8Smickey exit(1);
37*ca90fc32Smartynas if (floorl(4294967295.7L) != 4294967295.L)
38*ca90fc32Smartynas exit(1);
39f59190d8Smickey
40f59190d8Smickey exit(0);
41f59190d8Smickey }
42