/* @(#)findfp.c 1.2 (Berkeley) %G% */
#define NSTATIC 10 /* stdin, stdout, stderr, plus slack */
static FILE *dummy
[NSTATIC
];
static FILE **iov
= NULL
;
{ 0, NULL
, NULL
, NULL
, _IOREAD
, 0 }, /* stdin */
{ 0, NULL
, NULL
, NULL
, _IOWRT
, 1 }, /* stdout */
{ 0, NULL
, NULL
, NULL
, _IOWRT
|_IONBF
, 2 }, /* stderr */
static char smallbuf
[NSTATIC
];
static char *unbufp
= NULL
;
nfiles
= getdtablesize();
fp
= (FILE *)calloc(nfiles
- NSTATIC
, sizeof *fp
);
iov
= (FILE **)calloc(nfiles
, sizeof *iov
);
unbufp
= calloc(nfiles
, sizeof *unbufp
);
for (iovp
= iov
+ NSTATIC
; iovp
< iovend
; /* void */)
iovend
= dummy
+ NSTATIC
;
for (fp
= _iob
; fp
< _iob
+ NSTATIC
; /* void */)
for (iovp
= iov
; (*iovp
)->_flag
& (_IOREAD
|_IOWRT
|_IORW
); /* void */)
register FILE *_lastbuf
= _iob
+ NSTATIC
;
for (iop
= _iob
; iop
< _lastbuf
; iop
++)
for (iovp
= iov
; iovp
< iovend
; iovp
++)
return (&smallbuf
[iop
- _iob
]);
return (&unbufp
[fileno(iop
)]);