diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-03-27 11:29:00 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-03-27 11:29:00 +0000 |
commit | 6dcfbbc68f881fbf5c20d25817a0221dfb135170 (patch) | |
tree | 40307666f6d7711499061d8c4be75029a6d851e9 /usr/src/lib/libc/port/stdio/setvbuf.c | |
parent | b0624b90ec9a0c04cca626925beee3ae403457ce (diff) | |
parent | cd62a92d4a964bfe61d35ba2301b69e65e22a509 (diff) | |
download | illumos-joyent-6dcfbbc68f881fbf5c20d25817a0221dfb135170.tar.gz |
[illumos-gate merge]
commit cd62a92d4a964bfe61d35ba2301b69e65e22a509
7092 Want support for stdio memory streams
12360 fwrite can loop forever on zero byte write
12392 ftello64 doesn't handle ungetc() correctly when unbuffered
commit 1470234269f4edea4cbf270cb2475e4988b788d5
12359 Want a means to set the umem mtbf at runtine
commit 0ac311bae7f6f50d9ba506b52bd8860f2d68d4ce
12358 Need mbrtowc variant that indicates consumed zero bytes
commit d726994754c938f91b6fd7e96b5cab3829615c58
12357 getc/putc_unlocked need to set orientation
Diffstat (limited to 'usr/src/lib/libc/port/stdio/setvbuf.c')
-rw-r--r-- | usr/src/lib/libc/port/stdio/setvbuf.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/usr/src/lib/libc/port/stdio/setvbuf.c b/usr/src/lib/libc/port/stdio/setvbuf.c index a6e63e09f7..936466f893 100644 --- a/usr/src/lib/libc/port/stdio/setvbuf.c +++ b/usr/src/lib/libc/port/stdio/setvbuf.c @@ -25,9 +25,7 @@ */ /* Copyright (c) 1988 AT&T */ -/* All Rights Reserved */ - -#pragma ident "%Z%%M% %I% %E% SMI" +/* All Rights Reserved */ #include "lint.h" #include "file64.h" @@ -47,7 +45,7 @@ setvbuf(FILE *iop, char *abuf, int type, size_t size) Uchar *temp; int sflag = iop->_flag & _IOMYBUF; rmutex_t *lk; - int fd = GET_FD(iop); + int fd = _get_fd(iop); FLOCKFILE(lk, iop); iop->_flag &= ~(_IOMYBUF | _IONBF | _IOLBF); @@ -55,17 +53,14 @@ setvbuf(FILE *iop, char *abuf, int type, size_t size) /* note that the flags are the same as the possible values for type */ case _IONBF: iop->_flag |= _IONBF; /* file is unbuffered */ -#ifndef _STDIO_ALLOCATE - if (fd < 2) { + if (fd == 0 || fd == 1) { /* use special buffer for std{in,out} */ buf = (fd == 0) ? _sibuf : _sobuf; size = BUFSIZ; - } else /* needed for ifdef */ -#endif - if (fd < _NFILE) { + } else if (fd >= 2 && fd < _NFILE) { buf = _smbuf[fd]; size = _SMBFSZ - PUSHBACK; - } else + } else { if ((buf = malloc(_SMBFSZ * sizeof (Uchar))) != NULL) { iop->_flag |= _IOMYBUF; size = _SMBFSZ - PUSHBACK; @@ -73,6 +68,7 @@ setvbuf(FILE *iop, char *abuf, int type, size_t size) FUNLOCKFILE(lk); return (EOF); } + } break; case _IOLBF: case _IOFBF: |