HB_FHANDLE hb_fsCreateTemp( const BYTE * pszDir, const BYTE * pszPrefix, ULONG ulAttr, BYTE * pszName ) { USHORT nAttemptLeft = 999; while( --nAttemptLeft ) { if( hb_fsTempName( pszName, pszDir, pszPrefix ) ) { HB_FHANDLE fhnd = hb_fsCreateEx( pszName, ulAttr, FO_EXCLUSIVE | FO_EXCL ); /* This function may fail, if the generated filename got used between generation and the file creation. */ if( fhnd != FS_ERROR ) return fhnd; } else { /* Don't attempt to retry if the filename generator is failing for some reason. */ break; } } return FS_ERROR; }
HB_FHANDLE hb_fsCreateTemp( const char * pszDir, const char * pszPrefix, HB_FATTR ulAttr, char * pszName ) { #if defined( HB_OS_UNIX ) return hb_fsCreateTempEx( pszName, pszDir, pszPrefix, NULL, ulAttr ); #else /* If there was no special extension requested, we're using native temp file generation functions on systems where such API exist. */ int iAttemptLeft = 999; while( --iAttemptLeft ) { if( hb_fsTempName( pszName, pszDir, pszPrefix ) ) { #if defined( HB_OS_WIN ) /* Using FO_TRUNC on win platforms as hb_fsTempName() uses GetTempFileName(), which creates the file, so FO_EXCL would fail at this point. [vszakats] */ HB_FHANDLE fhnd = hb_fsCreateEx( pszName, ulAttr, FO_EXCLUSIVE | FO_TRUNC ); #else HB_FHANDLE fhnd = hb_fsCreateEx( pszName, ulAttr, FO_EXCLUSIVE | FO_EXCL ); #endif /* This function may fail, if the generated filename got used between generation and the file creation. */ if( fhnd != FS_ERROR ) return fhnd; } else { /* Don't attempt to retry if the filename generator is failing for some reason. */ break; } } return FS_ERROR; #endif }