xref: /llvm-project/compiler-rt/test/sanitizer_common/TestCases/Posix/setvbuf.cpp (revision 975fa725063fe33aba02164a53c4ef66662e68d8)
174989affSNico Weber // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
274989affSNico Weber 
3*975fa725SPaul Robinson // UNSUPPORTED: target={{.*solaris.*}}
474989affSNico Weber 
574989affSNico Weber #include <stdio.h>
674989affSNico Weber 
print_something()774989affSNico Weber void print_something() {
874989affSNico Weber   for (size_t i = 0; i < 10 * BUFSIZ; i++)
974989affSNico Weber     printf("Hello world %zu\n", i);
1074989affSNico Weber }
1174989affSNico Weber 
print_one_byte(char * buf)1274989affSNico Weber void print_one_byte(char *buf) {
1374989affSNico Weber   printf("First byte is %c\n", buf[0]);
1474989affSNico Weber }
1574989affSNico Weber 
test_setbuf()1674989affSNico Weber void test_setbuf() {
1774989affSNico Weber   char buf[BUFSIZ];
1874989affSNico Weber 
1974989affSNico Weber   setbuf(stdout, NULL);
2074989affSNico Weber 
2174989affSNico Weber   print_something();
2274989affSNico Weber 
2374989affSNico Weber   setbuf(stdout, buf);
2474989affSNico Weber 
2574989affSNico Weber   print_something();
2674989affSNico Weber 
2774989affSNico Weber   print_one_byte(buf);
289c8e93c1SVitaly Buka 
299c8e93c1SVitaly Buka   setbuf(stdout, NULL);
3074989affSNico Weber }
3174989affSNico Weber 
test_setbuffer()3274989affSNico Weber void test_setbuffer() {
3374989affSNico Weber   char buf[BUFSIZ];
3474989affSNico Weber 
3574989affSNico Weber   setbuffer(stdout, NULL, 0);
3674989affSNico Weber 
3774989affSNico Weber   print_something();
3874989affSNico Weber 
39856550caSAzat Khuzhin   // Ensure that interceptor reads correct size
40856550caSAzat Khuzhin   // (not BUFSIZ as by default, hence BUFSIZ/2).
41856550caSAzat Khuzhin   setbuffer(stdout, buf, BUFSIZ / 2);
4274989affSNico Weber 
4374989affSNico Weber   print_something();
4474989affSNico Weber 
4574989affSNico Weber   print_one_byte(buf);
469c8e93c1SVitaly Buka 
479c8e93c1SVitaly Buka   setbuffer(stdout, NULL, 0);
4874989affSNico Weber }
4974989affSNico Weber 
test_setlinebuf()5074989affSNico Weber void test_setlinebuf() {
5174989affSNico Weber   setlinebuf(stdout);
5274989affSNico Weber 
5374989affSNico Weber   print_something();
5474989affSNico Weber }
5574989affSNico Weber 
test_setvbuf()5674989affSNico Weber void test_setvbuf() {
5774989affSNico Weber   char buf[BUFSIZ];
5874989affSNico Weber 
5974989affSNico Weber   setvbuf(stdout, NULL, _IONBF, 0);
6074989affSNico Weber 
6174989affSNico Weber   print_something();
6274989affSNico Weber 
6374989affSNico Weber   setvbuf(stdout, buf, _IOLBF, BUFSIZ);
6474989affSNico Weber 
6574989affSNico Weber   print_something();
6674989affSNico Weber 
6774989affSNico Weber   print_one_byte(buf);
6874989affSNico Weber 
6974989affSNico Weber   setvbuf(stdout, buf, _IOFBF, BUFSIZ);
7074989affSNico Weber 
7174989affSNico Weber   print_something();
7274989affSNico Weber 
7374989affSNico Weber   print_one_byte(buf);
749c8e93c1SVitaly Buka 
759c8e93c1SVitaly Buka   setvbuf(stdout, NULL, _IONBF, 0);
7674989affSNico Weber }
7774989affSNico Weber 
main(void)7874989affSNico Weber int main(void) {
7974989affSNico Weber   printf("setvbuf\n");
8074989affSNico Weber 
8174989affSNico Weber   test_setbuf();
8274989affSNico Weber   test_setbuffer();
8374989affSNico Weber   test_setlinebuf();
8474989affSNico Weber   test_setvbuf();
8574989affSNico Weber 
8674989affSNico Weber   // CHECK: setvbuf
8774989affSNico Weber 
8874989affSNico Weber   return 0;
8974989affSNico Weber }
90