_WCRTLINK FILE *__F_NAME(fdopen,_wfdopen)( int handle, const CHAR_TYPE *access_mode ) { unsigned flags; FILE * fp; #if !defined(__NETWARE__) int extflags; #endif if( handle == -1 ) { __set_errno( EBADF ); /* 5-dec-90 */ return( NULL ); /* 19-apr-90 */ } #ifdef __NETWARE__ flags = __F_NAME(__open_flags,__wopen_flags)( access_mode ); #else flags = __F_NAME(__open_flags,__wopen_flags)( access_mode, &extflags ); #endif if( flags == 0 ) return( NULL ); #if !defined(__NETWARE__) /* make sure the handle has the same text/binary mode */ if( __iomode( handle, flags ) == -1 ) { return( NULL ); } #endif fp = __allocfp( handle ); /* JBS 30-aug-91 */ if( fp ) { fp->_flag &= ~(_READ | _WRITE); /* 2-dec-90 */ fp->_flag |= flags; fp->_cnt = 0; _FP_BASE(fp) = NULL; fp->_bufsize = 0; /* was BUFSIZ JBS 91/05/31 */ #ifndef __NETWARE__ _FP_ORIENTATION(fp) = _NOT_ORIENTED; /* initial orientation */ _FP_EXTFLAGS(fp) = extflags; #endif #if defined(__NT__) || defined(__OS2__) _FP_PIPEDATA(fp).isPipe = 0; /* not a pipe */ #endif fp->_handle = handle; /* BJS 91-07-23 */ if( __F_NAME(tolower,towlower)( *access_mode ) == 'a' ) { fseek( fp, 0L, SEEK_END ); } __chktty( fp ); /* JBS 31-may-91 */ #if !defined(__UNIX__) && !defined(__NETWARE__) __SetIOMode( handle, flags ); #endif } return( fp ); }
_WCRTLINK FILE *__F_NAME(fdopen,_wfdopen)( int handle, const CHAR_TYPE *access_mode ) { int file_flags; FILE *fp; int extflags; if( handle == -1 ) { _RWD_errno = EBADF; return( NULL ); } file_flags = __F_NAME(__open_flags,__wopen_flags)( access_mode, &extflags ); if( file_flags == 0 ) return( NULL ); #ifndef __NETWARE__ /* make sure the handle has the same text/binary mode */ if( __iomode( handle, file_flags ) == -1 ) { return( NULL ); } #endif fp = __allocfp(); if( fp != NULL ) { fp->_flag |= file_flags; fp->_cnt = 0; _FP_BASE( fp ) = NULL; fp->_bufsize = 0; /* was BUFSIZ JBS 91/05/31 */ #ifndef __NETWARE__ _FP_ORIENTATION(fp) = _NOT_ORIENTED; /* initial orientation */ _FP_EXTFLAGS(fp) = extflags; #endif #if defined( __NT__ ) || defined( __OS2__ ) || defined(__UNIX__) _FP_PIPEDATA(fp).isPipe = 0; /* not a pipe */ #endif fp->_handle = handle; /* BJS 91-07-23 */ if( __F_NAME(tolower,towlower)( (UCHAR_TYPE)*access_mode ) == STRING( 'a' ) ) { fseek( fp, 0, SEEK_END ); } __chktty( fp ); /* JBS 31-may-91 */ #if !defined( __UNIX__ ) && !defined( __NETWARE__ ) __SetIOMode( handle, file_flags ); #endif } return( fp ); }
static FILE *__F_NAME(__doopen,__wdoopen)( const CHAR_TYPE *name, CHAR_TYPE mode, int file_flags, int extflags, int shflag, /* sharing flag */ FILE * fp ) { int open_mode; int p_mode; SetupTGCSandNCS( RETURN_ARG( FILE *, 0 ) ); /* for NW386 */ fp->_flag &= ~(_READ | _WRITE); fp->_flag |= file_flags; /* we need the mode character to indicate if the original */ /* intention is to open for read or for write */ mode = __F_NAME(tolower,towlower)( mode ); if( mode == 'r' ) { open_mode = O_RDONLY; if( file_flags & _WRITE ) { /* if "r+" mode */ open_mode = O_RDWR; } #if defined( __NETWARE__ ) open_mode |= O_BINARY; #elif defined( __UNIX__ ) #else if( file_flags & _BINARY ) { open_mode |= O_BINARY; } else { open_mode |= O_TEXT; } #endif p_mode = 0; } else { /* mode == 'w' || mode == 'a' */ if( file_flags & _READ ) { /* if "a+" or "w+" mode */ open_mode = O_RDWR | O_CREAT; } else { open_mode = O_WRONLY | O_CREAT; } if( file_flags & _APPEND ) { open_mode |= O_APPEND; } else { /* mode == 'w' */ open_mode |= O_TRUNC; } #if defined( __NETWARE__ ) open_mode |= O_BINARY; #elif defined( __UNIX__ ) #else if( file_flags & _BINARY ) { open_mode |= O_BINARY; } else { open_mode |= O_TEXT; } #endif p_mode = PMODE; } fp->_handle = __F_NAME(sopen,_wsopen)( name, open_mode, shflag, p_mode ); if( fp->_handle == -1 ) { // since we couldn't open the file, release the FILE struct __freefp( fp ); return( NULL ); } fp->_cnt = 0; fp->_bufsize = 0; /* was BUFSIZ JBS 31-may-91 */ #ifndef __NETWARE__ _FP_ORIENTATION(fp) = _NOT_ORIENTED; /* initial orientation */ _FP_EXTFLAGS(fp) = extflags; #endif #if defined( __NT__ ) || defined( __OS2__ ) _FP_PIPEDATA(fp).isPipe = 0; /* not a pipe */ #endif _FP_BASE(fp) = NULL; if( file_flags & _APPEND ) { fseek( fp, 0L, SEEK_END ); } __chktty( fp ); /* JBS 28-aug-90 */ return( fp ); }