90 lines · cpp
1// RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s2 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("Hello world %zu\n", i);10}11 12void print_one_byte(char *buf) {13 printf("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);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, 0);36 37 print_something();38 39 // Ensure that interceptor reads correct size40 // (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 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, 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 78int main(void) {79 printf("setvbuf\n");80 81 test_setbuf();82 test_setbuffer();83 test_setlinebuf();84 test_setvbuf();85 86 // CHECK: setvbuf87 88 return 0;89}90