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
7void print_something() {
8 for (size_t i = 0; i < 10 * BUFSIZ; i++)
9 printf(format: "Hello world %zu\n", i);
10}
11
12void print_one_byte(char *buf) {
13 printf(format: "First byte is %c\n", buf[0]);
14}
15
16void test_setbuf() {
17 char buf[BUFSIZ];
18
19 setbuf(stdout, NULL);
20
21 print_something();
22
23 setbuf(stdout, buf: buf);
24
25 print_something();
26
27 print_one_byte(buf);
28
29 setbuf(stdout, NULL);
30}
31
32void test_setbuffer() {
33 char buf[BUFSIZ];
34
35 setbuffer(stdout, NULL, size: 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: buf, BUFSIZ / 2);
42
43 print_something();
44
45 print_one_byte(buf);
46
47 setbuffer(stdout, NULL, size: 0);
48}
49
50void test_setlinebuf() {
51 setlinebuf(stdout);
52
53 print_something();
54}
55
56void test_setvbuf() {
57 char buf[BUFSIZ];
58
59 setvbuf(stdout, NULL, _IONBF, n: 0);
60
61 print_something();
62
63 setvbuf(stdout, buf: buf, _IOLBF, BUFSIZ);
64
65 print_something();
66
67 print_one_byte(buf);
68
69 setvbuf(stdout, buf: buf, _IOFBF, BUFSIZ);
70
71 print_something();
72
73 print_one_byte(buf);
74
75 setvbuf(stdout, NULL, _IONBF, n: 0);
76}
77
78int main(void) {
79 printf(format: "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

source code of compiler-rt/test/sanitizer_common/TestCases/Posix/setvbuf.cpp