xref: /llvm-project/compiler-rt/test/sanitizer_common/TestCases/Posix/setvbuf.cpp (revision 975fa725063fe33aba02164a53c4ef66662e68d8)
1 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
2 
3 // UNSUPPORTED: target={{.*solaris.*}}
4 
5 #include <stdio.h>
6 
print_something()7 void print_something() {
8   for (size_t i = 0; i < 10 * BUFSIZ; i++)
9     printf("Hello world %zu\n", i);
10 }
11 
print_one_byte(char * buf)12 void print_one_byte(char *buf) {
13   printf("First byte is %c\n", buf[0]);
14 }
15 
test_setbuf()16 void test_setbuf() {
17   char buf[BUFSIZ];
18 
19   setbuf(stdout, NULL);
20 
21   print_something();
22 
23   setbuf(stdout, buf);
24 
25   print_something();
26 
27   print_one_byte(buf);
28 
29   setbuf(stdout, NULL);
30 }
31 
test_setbuffer()32 void test_setbuffer() {
33   char buf[BUFSIZ];
34 
35   setbuffer(stdout, NULL, 0);
36 
37   print_something();
38 
39   // Ensure that interceptor reads correct size
40   // (not BUFSIZ as by default, hence BUFSIZ/2).
41   setbuffer(stdout, buf, BUFSIZ / 2);
42 
43   print_something();
44 
45   print_one_byte(buf);
46 
47   setbuffer(stdout, NULL, 0);
48 }
49 
test_setlinebuf()50 void test_setlinebuf() {
51   setlinebuf(stdout);
52 
53   print_something();
54 }
55 
test_setvbuf()56 void test_setvbuf() {
57   char buf[BUFSIZ];
58 
59   setvbuf(stdout, NULL, _IONBF, 0);
60 
61   print_something();
62 
63   setvbuf(stdout, buf, _IOLBF, BUFSIZ);
64 
65   print_something();
66 
67   print_one_byte(buf);
68 
69   setvbuf(stdout, buf, _IOFBF, BUFSIZ);
70 
71   print_something();
72 
73   print_one_byte(buf);
74 
75   setvbuf(stdout, NULL, _IONBF, 0);
76 }
77 
main(void)78 int main(void) {
79   printf("setvbuf\n");
80 
81   test_setbuf();
82   test_setbuffer();
83   test_setlinebuf();
84   test_setvbuf();
85 
86   // CHECK: setvbuf
87 
88   return 0;
89 }
90