packaging: Enable memcpy in sysdeps/arm/memcpy.S for ARM
[platform/upstream/glibc.git] / assert / test-assert-perr.c
1 /* Test assert_perror().
2  *
3  * This is hairier than you'd think, involving games with
4  * stdio and signals.
5  *
6  */
7
8 #include <signal.h>
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include <string.h>
12 #include <setjmp.h>
13
14 #include <support/xstdio.h>
15
16 jmp_buf rec;
17 char buf[160];
18
19 static void
20 sigabrt (int unused)
21 {
22   longjmp (rec, 1);  /* recover control */
23 }
24
25 #undef NDEBUG
26 #include <assert.h>
27 static void
28 assert1 (void)
29 {
30   assert_perror (1);
31 }
32
33 static void
34 assert2 (void)
35 {
36   assert_perror (0);
37 }
38
39 #define NDEBUG
40 #include <assert.h>
41 static void
42 assert3 (void)
43 {
44   assert_perror (2);
45 }
46
47 int
48 main(void)
49 {
50   volatile int failed = 1;  /* safety in presence of longjmp() */
51
52   fclose (stderr);
53   stderr = tmpfile ();
54   if (!stderr)
55     abort ();
56
57   signal (SIGABRT, sigabrt);
58
59   if (!setjmp (rec))
60     assert1 ();
61   else
62     failed = 0;  /* should happen */
63
64   if (!setjmp (rec))
65     assert2 ();
66   else
67     failed = 1; /* should not happen */
68
69   if (!setjmp (rec))
70     assert3 ();
71   else
72     failed = 1; /* should not happen */
73
74   rewind (stderr);
75   xfgets (buf, 160, stderr);
76   if (!strstr(buf, strerror (1)))
77     failed = 1;
78
79   xfgets (buf, 160, stderr);
80   if (strstr (buf, strerror (0)))
81     failed = 1;
82
83   xfgets (buf, 160, stderr);
84   if (strstr (buf, strerror (2)))
85     failed = 1;
86
87   return failed;
88 }