Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}