void LnkFilesInit( void ) /******************************/ // the linker doesn't use stdaux or stdprn, so close these. { CaughtBreak = NOT_HIT; if( !AuxFilesClosed ) { OpenFiles = 2; // will be 0 when done closing stdaux & stdprn. QClose( STDAUX_HANDLE, "stdaux" ); QClose( STDPRN_HANDLE, "stdprn" ); AuxFilesClosed = TRUE; OpenFiles = 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; } }
static void CleanSubSystems( void ) /*********************************/ { if( MapFile != NIL_HANDLE ) { QClose( MapFile, MapFName ); MapFile = NIL_HANDLE; } FreeOutFiles(); _LnkFree( MapFName ); BurnSystemList(); FreeList( LibPath ); CloseSpillFile(); CleanTraces(); FreePaths(); FreeUndefs(); FreeLocalImports(); CleanLoadFile(); CleanLinkStruct(); FreeFormatStuff(); FreeObjInfo(); FreeVirtMem(); CleanToc(); CleanSym(); CleanPermData(); }
bool CleanCachedHandles( void ) /************************************/ { infilelist *list; for( list = CachedFiles; list != NULL; list = list->next ) { if( !(list->flags & INSTAT_IN_USE) && list->handle != NIL_HANDLE )break; } if( list == NULL ) return( FALSE ); QClose( list->handle, list->name ); list->handle = NIL_HANDLE; return( TRUE ); }
static void RestoreCmdLine( void ) /********************************/ // Restore a saved command line. { void * temp; QClose( CmdFile->file, CmdFile->name ); MemFree( CmdFile->name ); MemFree( CmdFile->buffer ); temp = CmdFile->next; MemFree( CmdFile ); CmdFile = temp; }
static void RestoreCmdLine( void ) /********************************/ // Restore a saved command line. { cmdfilelist *temp; temp = CmdFile; CmdFile = CmdFile->next; QClose( temp->file, temp->name ); MemFree( temp->name ); MemFree( temp->buffer ); MemFree( temp ); }
void CloseSpillFile( void ) /*************************/ /* Close temporary file. */ { if( TempFile != NIL_FHANDLE ) { RestoreBreak(); QClose( TempFile, TFileName ); QDelete( TFileName ); _LnkFree( TFileName ); TFileName = NULL; TempFile = NIL_FHANDLE; } }
void FreeParserMem( void ) /*******************************/ { cmdfilelist *curr; while( (curr = CmdFile) != NULL ) { CmdFile = CmdFile->next; if( curr->file != NIL_FHANDLE ) { QClose( curr->file, curr->name ); } MemFree( curr->buffer ); MemFree( curr->name ); MemFree( curr ); } }
extern void FreeParserMem( void ) /*******************************/ { cmdfilelist *next; for( ; CmdFile != NULL; CmdFile = next ) { next = CmdFile->next; if( CmdFile->file != NIL_HANDLE ) { QClose( CmdFile->file, CmdFile->name ); } MemFree( CmdFile->buffer ); MemFree( CmdFile->name ); MemFree( CmdFile ); } }
static void WriteQNXResource( void ) /**********************************/ { unsigned long len; lmf_record rec; f_handle file; lmf_resource resource; void * buf; if( FmtData.resource != NULL ) { rec.reserved = 0; rec.spare = 0; rec.rec_type = LMF_RESOURCE_REC; memset( &resource, 0, sizeof( lmf_resource ) ); if( FmtData.res_name_only ) { file = QObjOpen( FmtData.resource ); if( file == NIL_FHANDLE ) { PrintIOError( WRN+MSG_CANT_OPEN_NO_REASON, "s", FmtData.resource ); return; } len = QFileSize( file ); if( len + sizeof(lmf_resource) > QNX_MAX_REC_SIZE ) { LnkMsg( WRN+MSG_RESOURCE_TOO_BIG, "s", FmtData.resource ); return; } _ChkAlloc( buf, len ); rec.data_nbytes = len + sizeof( lmf_resource ); WriteLoad( &rec, sizeof( lmf_record ) ); WriteLoad( &resource, sizeof( lmf_resource ) ); QRead( file, buf, len, FmtData.resource ); WriteLoad( buf, len ); _LnkFree( buf ); QClose( file, FmtData.resource ); } else { len = strlen( FmtData.resource ); FmtData.resource[len] = '\n'; len++; rec.data_nbytes = len + sizeof( lmf_resource ); WriteLoad( &rec, sizeof( lmf_record ) ); WriteLoad( &resource, sizeof( lmf_resource ) ); WriteLoad( FmtData.resource, len ); } } }
f_handle OpenTempFile( char **fname ) /***********************************/ { const char *ptr; size_t tlen; char *tptr; f_handle fhdl; ptr = GetEnvString( "WLINKTMP" ); if( ptr == NULL ) ptr = GetEnvString( "TMP" ); if( ptr == NULL ) ptr = GetEnvString( "TMPDIR" ); if( ptr == NULL ) { _ChkAlloc( tptr, TEMPFNAME_SIZE ); *fname = tptr; } else { tlen = strlen( ptr ); _ChkAlloc( tptr, tlen + 1 + TEMPFNAME_SIZE ); memcpy( tptr, ptr, tlen ); *fname = tptr; tptr += tlen; if( !IS_PATH_SEP( tptr[-1] ) ) { *tptr++ = DIR_SEP; } } tptr = MakeTempName( tptr ); tlen = 0; for( ;; ) { if( tlen >= 26 ) { LnkMsg( FTL+MSG_CANT_OPEN_SPILL, NULL ); } *tptr += 1; // change temp file extension fhdl = TempFileOpen( *fname ); if( fhdl == NIL_FHANDLE ) break; QClose( fhdl, *fname ); ++tlen; } return( QOpenRW( *fname ) ); }