mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
54 lines
1.9 KiB
C
54 lines
1.9 KiB
C
/***************************************************************************
|
||
*
|
||
* f d o p e n F u n c t i o n
|
||
* -----------------------------
|
||
* Copyright 1982 by Digital Research Inc. All rights reserved.
|
||
*
|
||
* "fdopen" associates a file which was opened by a file descriptor
|
||
* (using "open" or "creat") with a stream.
|
||
*
|
||
* Calling sequence:
|
||
* stream = fdopen( fd, mode )
|
||
* Where:
|
||
* stream -> stream info (FILE *) (NULLPTR returned on fail)
|
||
* fd = small int returned by open or creat
|
||
* mode = "r" for read-only, "w" for write, "a" for append
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#include "stdio.h"
|
||
|
||
FILE * fdopen( fd, mode ) /* CLEAR FUNCTION ***********/
|
||
REG WORD fd;
|
||
REG BYTE *mode;
|
||
{
|
||
REG FILE *sp;
|
||
REG WORD ii;
|
||
/****************************/
|
||
if( fd<0 || lseek(fd,0L,1)==FAILURE ) /* is fd valid? */
|
||
return(NULLFILE); /* no, oh well */
|
||
for( ii=0; /* look at _iob table */
|
||
(sp=(&_iob[ii]))->_flag&(_IOREAD|_IOWRT); /* not marked rd/wrt */
|
||
ii++ ) /* */
|
||
if( ii >= MAXFILES ) /* if off end of table */
|
||
break; /* */
|
||
if( ii >= MAXFILES ) /* */
|
||
return(NULLFILE); /* fail */
|
||
if( *mode != 'r' && *mode != 'R') /* not 'r'ead mode? */
|
||
{ /* */
|
||
sp->_flag |= _IOWRT; /* set this flag */
|
||
if( *mode == 'a' || /* 'a'ppend mode? */
|
||
*mode == 'A' ) /* */
|
||
lseek(fd,0L,2); /* its out there, seef EOF */
|
||
} /* ************************/
|
||
else sp->_flag |= _IOREAD; /* 'r'ead mode */
|
||
/****************************/
|
||
sp->_cnt = 0; /* init count */
|
||
sp->_fd = fd; /* and file des */
|
||
sp->_base = sp->_ptr = NULLPTR; /* and buffer pointers */
|
||
/****************************/
|
||
return(sp); /* return the stream ptr */
|
||
} /****************************/
|
||
*******/
|
||
*******/
|