add _DEFAULT_SOURCE wherever _BSD_SOURCE was used
[libc-test] / src / functional / sscanf_long.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <math.h>
5 #include <errno.h>
6 #include <sys/resource.h>
7 #include "test.h"
8
9 int main(void)
10 {
11         enum {n = 8*1024*1024};
12         char *s = malloc(n);
13         int i;
14         float f;
15         char c;
16
17         if (!s)
18                 return t_error("out of memory");
19         t_setrlim(RLIMIT_STACK, 100*1024);
20
21         for (i = 0; i < n; i++) s[i] = '1';
22         s[n-3] = ' ';
23         s[n-1] = 0;
24
25         /*
26          * stack overflow if scanf copies s on the stack (glibc)
27          * same issue with %d except then storing the conversion
28          * result is undefined behaviour
29          */
30         i = sscanf(s, "%f %c", &f, &c);
31
32         if (i != 2)
33                 t_error("sscanf returned %d, want 2\n", i);
34         if (f != INFINITY)
35                 t_error("sscanf(longnum, \"%%f\") read %f, want inf\n", f);
36         if (c != '1')
37                 t_error("sscanf(\"1\", %%c) read '%c', want '1'\n", c);
38         free(s);
39         return t_status;
40 }