Rev | Line | |
---|
[9] | 1 | /*
|
---|
| 2 | * setbuf.c - control buffering of a stream
|
---|
| 3 | */
|
---|
| 4 | /* $Id: setvbuf.c,v 1.1.1.1 2005/04/21 14:56:36 beng Exp $ */
|
---|
| 5 |
|
---|
| 6 | #include <stdio.h>
|
---|
| 7 | #include <stdlib.h>
|
---|
| 8 | #include "loc_incl.h"
|
---|
| 9 |
|
---|
| 10 | extern void (*_clean)(void);
|
---|
| 11 |
|
---|
| 12 | int
|
---|
| 13 | setvbuf(register FILE *stream, char *buf, int mode, size_t size)
|
---|
| 14 | {
|
---|
| 15 | int retval = 0;
|
---|
| 16 |
|
---|
| 17 | _clean = __cleanup;
|
---|
| 18 | if (mode != _IOFBF && mode != _IOLBF && mode != _IONBF)
|
---|
| 19 | return EOF;
|
---|
| 20 |
|
---|
| 21 | if (stream->_buf && io_testflag(stream,_IOMYBUF) )
|
---|
| 22 | free((void *)stream->_buf);
|
---|
| 23 |
|
---|
| 24 | stream->_flags &= ~(_IOMYBUF | _IONBF | _IOLBF);
|
---|
| 25 |
|
---|
| 26 | if (buf && size <= 0) retval = EOF;
|
---|
| 27 | if (!buf && (mode != _IONBF)) {
|
---|
| 28 | if (size <= 0 || (buf = (char *) malloc(size)) == NULL) {
|
---|
| 29 | retval = EOF;
|
---|
| 30 | } else {
|
---|
| 31 | stream->_flags |= _IOMYBUF;
|
---|
| 32 | }
|
---|
| 33 | }
|
---|
| 34 |
|
---|
| 35 | stream->_buf = (unsigned char *) buf;
|
---|
| 36 |
|
---|
| 37 | stream->_count = 0;
|
---|
| 38 | stream->_flags |= mode;
|
---|
| 39 | stream->_ptr = stream->_buf;
|
---|
| 40 |
|
---|
| 41 | if (!buf) {
|
---|
| 42 | stream->_bufsiz = 1;
|
---|
| 43 | } else {
|
---|
| 44 | stream->_bufsiz = size;
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | return retval;
|
---|
| 48 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.