Ejemplo n.º 1
0
static int open_base( const CHAR_TYPE *name, int mode )
{
    int                 handle;
    rdos_handle_type   *obj;
    int                 rdos_handle;
    int                 rwmode;
    unsigned            iomode_flags;

    rwmode = mode & OPENMODE_ACCESS_MASK;
    iomode_flags = 0;
    if( mode == O_RDWR )                iomode_flags |= _READ | _WRITE;
    if( rwmode == O_RDONLY)             iomode_flags |= _READ;
    if( rwmode == O_WRONLY)             iomode_flags |= _WRITE;
    if( mode & O_APPEND )               iomode_flags |= _APPEND;
    if( mode & (O_BINARY|O_TEXT) )
        if( mode & O_BINARY )           iomode_flags |= _BINARY;

    if( !strcmp( name, CONSOLE ) ) {
        if( mode & O_CREAT )
            obj = console_out;
        else
            obj = console_in;
        obj->ref_count++;
        handle = AllocHandleEntry( obj );
        return( handle );
    }
    else {
        if( mode & O_CREAT ) {
            if( mode & O_EXCL ) {
                rdos_handle = RdosOpenFile( name, 0 );
                if( rdos_handle ) {
                    RdosCloseFile( rdos_handle );
                    return( -1 );
                }
            }
            rdos_handle = RdosCreateFile( name, 0 );    
        }
        else
            rdos_handle = RdosOpenFile( name, 0 );    

        if( rdos_handle )
            if( mode & O_TRUNC )
                RdosSetFileSize( rdos_handle, 0 );
    
        if( rdos_handle ) {
            obj = AllocHandleObj( name );
            if( obj ) {
                obj->rdos_handle = rdos_handle;
                obj->mode = iomode_flags;
                obj->type = HANDLE_TYPE_FILE;
                handle = AllocHandleEntry( obj );
                return( handle );
            }
        }
    }
    return( -1 );
}
Ejemplo n.º 2
0
static int open_base( const CHAR_TYPE *name, int mode )
{
    int                 handle;
    rdos_handle_type   *obj;
    int                 rdos_handle;
    unsigned            iomode_flags;
    int                 rwmode;

    rwmode = mode & OPENMODE_ACCESS_MASK;    
    iomode_flags = 0;
    if( mode == O_RDWR )                iomode_flags |= _READ | _WRITE;
    if( rwmode == O_RDONLY)             iomode_flags |= _READ;
    if( rwmode == O_WRONLY)             iomode_flags |= _WRITE;
    if( mode & O_APPEND )               iomode_flags |= _APPEND;
    if( mode & (O_BINARY|O_TEXT) )
        if( mode & O_BINARY )           iomode_flags |= _BINARY;

    rdos_handle = RdosOpenKernelFile( name, mode );
    if( rdos_handle ) {
        obj = AllocHandleObj( name );
        if( obj ) {
            obj->rdos_handle = rdos_handle;
            obj->mode = iomode_flags;
            obj->pos = 0;
            handle = AllocHandleEntry( obj );
            return( handle );
        }
    }
    return( -1 );
}
Ejemplo n.º 3
0
_WCRTLINK int dup( int handle )
{
    rdos_handle_type   *obj = 0;

    RdosEnterKernelSection( &handle_section );

    if( handle >= 0 && handle < handle_count )
        if( handle_ptr[handle] )
            obj = handle_ptr[handle];

    if( obj )
        obj->ref_count++;
    
    RdosLeaveKernelSection( &handle_section );

    if( obj )
        return( AllocHandleEntry( obj ) );
    else
        return( -1 );
}
Ejemplo n.º 4
0
static void ProcessFile( char *filename, int handle, unsigned mode )
{
    rdos_handle_type *obj;
    int rdos_handle;
    int org_handle;
    
    rdos_handle = RdosOpenFile( filename, 0 );

    if( rdos_handle ) {
        obj = AllocHandleObj( filename );
    }

    if( obj ) {
        obj->rdos_handle = rdos_handle;
        obj->mode = mode;
        obj->type = HANDLE_TYPE_FILE;
        org_handle = AllocHandleEntry( obj );
        dup2( org_handle, handle );
        close( org_handle );
    }
}