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