Ultrix-3.1/src/libc/stdio/setvbuf.c

Compare this file to the similar file:
Show the results in this format:


/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

/*
 * SCCSID: @(#)setvbuf.c	3.0	4/22/86
 */
/*	(System 5)  setvbuf.c  1.2  */
/*LINTLIBRARY*/
#include "stdio.h"

extern void free();
extern int isatty();

int
setvbuf(iop, type, buf, size)
register FILE *iop;
register int type;
register char	*buf;
register int size;
{
	char *malloc();

	if(iop->_base != NULL && iop->_flag & _IOMYBUF)
		free((char*)iop->_base);
	iop->_flag &= ~(_IOMYBUF | _IONBF | _IOLBF);
	switch (type)  {
	    /*note that the flags are the same as the possible values for type*/
	    case _IONBF:
		/* file is unbuffered */
		iop->_flag |= _IONBF;
		_bufend(iop) = iop->_base = NULL;
		break;
	    case _IOLBF:
	    case _IOFBF:
		iop->_flag |= type;
		size = (size == 0) ? BUFSIZ : size;
		if ((size > BUFSIZ) || (iop->_base == NULL))
			iop->_base = (unsigned char *)
				     malloc((unsigned)(size + 8));
		_bufend(iop) = iop->_base + size;
		break;
	    default:
		return -1;
	}
	iop->_ptr = iop->_base;
	iop->_cnt = 0;
	return 0;
}