Ejemplo n.º 1
0
void CacheClose( file_list *list, unsigned pass )
/******************************************************/
{
    infilelist *file;
    bool        nukecache;

    if( list == NULL )
        return;
    file = list->file;
//    if( file->handle == NIL_FHANDLE ) return;
    file->flags &= ~INSTAT_IN_USE;
    switch( pass ) {
    case 1: /* first pass */
        nukecache = !(file->flags & INSTAT_LIBRARY);
        if( file->flags & INSTAT_FULL_CACHE ) {
            if( nukecache ) {
                FreeObjCache( list );
            }
        } else {
            DumpFileCache( file, nukecache );   // don't cache .obj's
        }
        break;
    case 3: /* freeing structure */
        FreeObjCache( list );
        if( file->handle != NIL_FHANDLE ) {
            QClose( file->handle, file->name );
            file->handle = NIL_FHANDLE;
        }
        break;
    }
}
Ejemplo n.º 2
0
void BurnLibs( void )
/**************************/
/* let dict memory know it's no longer needed */
{
    file_list   *temp;
    dict_entry  *dict;

    for( temp = ObjLibFiles; temp != NULL; temp = temp->next_file ) {
        if( temp->status & STAT_AR_LIB ) {
            CacheFree( temp, temp->strtab );
            temp->strtab = NULL;
        }
        dict = temp->u.dict;
        if( dict == NULL )
            continue;
        if( temp->status & STAT_AR_LIB ) {
            CacheFree( temp, dict->a.filepostab - 1 );
            _LnkFree( dict->a.symbtab );
        } else {
            if( dict->o.cache != NULL ) {
                FreeDictCache( dict->o.cache, ( dict->o.pages / PAGES_IN_CACHE ) + 1 );
            }
        }
        _LnkFree( dict );
        temp->u.dict = NULL;
        FreeObjCache( temp );
    }
}
Ejemplo n.º 3
0
extern  bool    MemCheck( size_t size )
/**********************************/
{
    if( FEMoreMem( size ) ) return( TRUE );
    if( FreeObjCache() ) return( TRUE );
    if( ScoreFrlFree() ) return( TRUE );
    if( AddrFrlFree() ) return( TRUE );
    if( RegTreeFrlFree() ) return( TRUE );
    if( CFFrlFree() ) return( TRUE );
    if( InsFrlFree() ) return( TRUE );
    if( TreeFrlFree() ) return( TRUE );
    if( ConfFrlFree() ) return( TRUE );
    if( NameFrlFree() ) return( TRUE );
    if( InstrFrlFree() ) return( TRUE );
    if( SchedFrlFree() ) return( TRUE );
    if( FlushSomeOpt( size ) ) return( TRUE );
    return( FALSE );
}