xref: /openbsd/regress/lib/libm/floor/floor.c (revision ca90fc32)
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