Line data Source code
1 : /* setlinebuf.c - line-buffer a stdio stream. */ 2 : 3 : /* Copyright (C) 1997 Free Software Foundation, Inc. 4 : 5 : This file is part of GNU Bash, the Bourne Again SHell. 6 : 7 : Bash is free software: you can redistribute it and/or modify 8 : it under the terms of the GNU General Public License as published by 9 : the Free Software Foundation, either version 3 of the License, or 10 : (at your option) any later version. 11 : 12 : Bash is distributed in the hope that it will be useful, 13 : but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : GNU General Public License for more details. 16 : 17 : You should have received a copy of the GNU General Public License 18 : along with Bash. If not, see <http://www.gnu.org/licenses/>. 19 : */ 20 : 21 : #include <config.h> 22 : 23 : #include <stdio.h> 24 : 25 : #include <xmalloc.h> 26 : 27 : #if defined (USING_BASH_MALLOC) 28 : # define LBUF_BUFSIZE 1008 29 : #else 30 : # define LBUF_BUFSIZE BUFSIZ 31 : #endif 32 : 33 : /* Cause STREAM to buffer lines as opposed to characters or blocks. */ 34 : int 35 18286500 : sh_setlinebuf (stream) 36 : FILE *stream; 37 : { 38 18286500 : char *local_linebuf; 39 : 40 : #if !defined (HAVE_SETLINEBUF) && !defined (HAVE_SETVBUF) 41 : return (0); 42 : #endif 43 : 44 : #if defined (USING_BASH_MALLOC) 45 : local_linebuf = (char *)xmalloc (LBUF_BUFSIZE); 46 : #else 47 18286500 : local_linebuf = (char *)NULL; 48 : #endif 49 : 50 : #if defined (HAVE_SETVBUF) 51 : 52 : # if defined (SETVBUF_REVERSED) 53 : return (setvbuf (stream, _IOLBF, local_linebuf, LBUF_BUFSIZE)); 54 : # else /* !SETVBUF_REVERSED */ 55 18286500 : return (setvbuf (stream, local_linebuf, _IOLBF, LBUF_BUFSIZE)); 56 : # endif /* !SETVBUF_REVERSED */ 57 : # else /* !HAVE_SETVBUF */ 58 : 59 : setlinebuf (stream); 60 : return (0); 61 : 62 : #endif /* !HAVE_SETVBUF */ 63 : }