home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
rmtmp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-17
|
3KB
|
135 lines
/***
*rmtmp.c - remove temporary files created by tmpfile.
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
*
*******************************************************************************/
#include <cruntime.h>
#include <stdio.h>
#include <file2.h>
#include <internal.h>
#include <mtdll.h>
#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);
}