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