int __cdecl _setmode( int fh, int mode ) { int retval; _VALIDATE_RETURN(((mode == _O_TEXT) || (mode == _O_BINARY) || (mode == _O_WTEXT) || (mode == _O_U8TEXT) || (mode == _O_U16TEXT)), EINVAL, -1); _CHECK_FH_RETURN(fh, EBADF, -1); _VALIDATE_RETURN((fh >= 0 && (unsigned)fh < (unsigned)_nhandle), EBADF, -1); _VALIDATE_RETURN((_osfile(fh) & FOPEN), EBADF, -1); /* lock the file */ _lock_fh(fh); __try { if (_osfile(fh) & FOPEN) /* set the text/binary mode */ { retval = _setmode_nolock(fh, mode); } else { errno = EBADF; _ASSERTE(("Invalid file descriptor. File possibly closed by a different thread", 0)); retval = -1; } } __finally { /* unlock the file */ _unlock_fh(fh); } /* Return to user (_setmode_nolock sets errno, if needed) */ return (retval); }
int __cdecl _commit ( int filedes ) { int retval; /* if filedes out of range, complain */ _CHECK_FH_RETURN( filedes, EBADF, -1 ); _VALIDATE_RETURN((filedes >= 0 && (unsigned)filedes < (unsigned)_nhandle), EBADF, -1); _VALIDATE_RETURN((_osfile(filedes) & FOPEN), EBADF, -1); _lock_fh(filedes); __try { if (_osfile(filedes) & FOPEN) { if ( !FlushFileBuffers((HANDLE)_get_osfhandle(filedes)) ) { retval = GetLastError(); } else { retval = 0; /* return success */ } /* map the OS return code to C errno value and return code */ if (retval == 0) goto good; _doserrno = retval; } errno = EBADF; retval = -1; _ASSERTE(("Invalid file descriptor. File possibly closed by a different thread",0)); good : ; } __finally { _unlock_fh(filedes); } return (retval); }