/*** *rmtmp.c - remove temporary files created by tmpfile. * * Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved. * *Purpose: * *******************************************************************************/ #include #include #include #include #include #ifdef _MSC_VER #pragma data_seg(".CRT$XPX") #ifdef _WIN32 static _PVFV pterm = _rmtmp; #else /* _WIN32 */ #if defined (_M_MPPC) || defined (_M_M68K) static _PVFV __prmtmp = _rmtmp; #endif /* defined (_M_MPPC) || defined (_M_M68K) */ #endif /* _WIN32 */ #pragma data_seg() #endif /* _MSC_VER */ #ifdef _WIN32 /* * Definitions for _tmpoff, _tempoff and _old_pfxlen. These will cause this * module to be linked in whenever the termination code needs it. */ #ifndef CRTDLL unsigned _tmpoff = 1; #endif /* CRTDLL */ unsigned _tempoff = 1; unsigned _old_pfxlen = 0; #else /* _WIN32 */ #if defined (_M_MPPC) || defined (_M_M68K) /* * Definitions for _tmpoff, _tempoff and _old_pfxlen. These will cause this * module to be linked in whenever the termination code needs it. */ unsigned int _tmpoff = 1; unsigned int _tempoff = 1; unsigned int _old_pfxlen = 0; /* * Define _prmtmp, the function pointer used in the termination code. */ void (__cdecl * _prmtmp)(void) = _rmtmp; #endif /* defined (_M_MPPC) || defined (_M_M68K) */ #endif /* _WIN32 */ /*** *int _rmtmp() - closes and removes temp files created by tmpfile * *Purpose: * closes and deletes all open files that were created by tmpfile. * *Entry: * None. * *Exit: * returns number of streams closed * *Exceptions: * *******************************************************************************/ int __cdecl _rmtmp ( void ) { REG2 int count = 0; #ifdef _WIN32 REG1 int i; _mlock(_IOB_SCAN_LOCK); for ( i = 0 ; i < _nstream ; i++) if ( __piob[i] != NULL ) { _lock_str2(i, __piob[i]); if ( inuse( (FILE *)__piob[i] ) && (((FILE *)__piob[i])->_tmpfname != NULL) ) { _fclose_lk( __piob[i] ); count++; } _unlock_str2(i, __piob[i]); } _munlock(_IOB_SCAN_LOCK); #else /* _WIN32 */ #if defined (_M_MPPC) || defined (_M_M68K) REG1 FILE *stream = _iob; for (; stream <= _lastiob; stream++) { if (inuse(stream) && (stream->_tmpfname != NULL) ) { fclose(stream); count++; } } #endif /* defined (_M_MPPC) || defined (_M_M68K) */ #endif /* _WIN32 */ return(count); }