static HB_BOOL fsGetTempDirByCase( char * pszName, const char * pszTempDir, HB_BOOL fTrans ) { HB_BOOL fOK = HB_FALSE; if( pszTempDir && *pszTempDir != '\0' ) { char * pTmp; if( fTrans ) hb_osStrDecode2( pszTempDir, pszName, HB_PATH_MAX - 1 ); else hb_strncpy( pszName, pszTempDir, HB_PATH_MAX - 1 ); switch( hb_setGetDirCase() ) { case HB_SET_CASE_LOWER: pTmp = hb_cdpnDupLower( hb_vmCDP(), pszName, NULL ); fOK = strcmp( pszName, pTmp ) == 0; hb_xfree( pTmp ); break; case HB_SET_CASE_UPPER: pTmp = hb_cdpnDupUpper( hb_vmCDP(), pszName, NULL ); fOK = strcmp( pszName, pTmp ) == 0; hb_xfree( pTmp ); break; default: fOK = HB_TRUE; break; } } if( fOK ) { # if defined( __DJGPP__ ) || defined( HB_OS_OS2 ) /* convert '/' to '\' */ char * pszDelim = pszName; while( ( pszDelim = strchr( pszDelim, '/' ) ) != NULL ) *pszDelim = '\\'; # endif if( ! hb_fsDirExists( pszTempDir ) ) fOK = HB_FALSE; } return fOK; }
static HB_BOOL hb_fsTempName( char * pszBuffer, const char * pszDir, const char * pszPrefix ) { HB_BOOL fResult; pszBuffer[ 0 ] = '\0'; hb_vmUnlock(); #if defined( HB_OS_WIN ) { LPCTSTR lpPrefix, lpDir; LPTSTR lpPrefixFree = NULL, lpDirFree = NULL; TCHAR lpBuffer[ HB_PATH_MAX ]; TCHAR lpTempDir[ HB_PATH_MAX ]; lpPrefix = pszPrefix ? HB_FSNAMECONV( pszPrefix, &lpPrefixFree ) : NULL; if( pszDir && pszDir[ 0 ] != '\0' ) lpDir = HB_FSNAMECONV( pszDir, &lpDirFree ); else { if( ! GetTempPath( HB_PATH_MAX, lpTempDir ) ) { hb_fsSetIOError( HB_FALSE, 0 ); return HB_FALSE; } lpTempDir[ HB_PATH_MAX - 1 ] = TEXT( '\0' ); lpDir = lpTempDir; } fResult = GetTempFileName( lpDir, lpPrefix ? lpPrefix : TEXT( "hb" ), 0, lpBuffer ); if( fResult ) HB_OSSTRDUP2( lpBuffer, pszBuffer, HB_PATH_MAX - 1 ); if( lpPrefixFree ) hb_xfree( lpPrefixFree ); if( lpDirFree ) hb_xfree( lpDirFree ); } #else { char * pTmpBuffer = hb_xgrab( L_tmpnam + 1 ); /* TODO: Implement these: */ HB_SYMBOL_UNUSED( pszDir ); HB_SYMBOL_UNUSED( pszPrefix ); pTmpBuffer[ 0 ] = '\0'; fResult = ( tmpnam( pszBuffer ) != NULL ); pTmpBuffer[ L_tmpnam ] = '\0'; if( fResult ) { # if defined( __DJGPP__ ) /* convert '/' to '\' */ char * pszDelim = pTmpBuffer; while( ( pszDelim = strchr( pszDelim, '/' ) ) != NULL ) *pszDelim = '\\'; # endif hb_osStrDecode2( pTmpBuffer, pszBuffer, HB_PATH_MAX - 1 ); } hb_xfree( pTmpBuffer ); } #endif hb_fsSetIOError( fResult, 0 ); hb_vmLock(); return fResult; }
HB_BOOL hb_getenv_buffer( const char * szName, char * szBuffer, int nSize ) { HB_BOOL fRetVal; #if defined( HB_OS_WIN ) { LPTSTR lpName = HB_CHARDUP( szName ), lpBuffer; if( szBuffer != NULL || nSize > 0 ) lpBuffer = ( LPTSTR ) hb_xgrab( nSize * sizeof( TCHAR ) ); else lpBuffer = NULL; fRetVal = GetEnvironmentVariable( lpName, lpBuffer, nSize ) != 0; if( lpBuffer ) { if( fRetVal ) { lpBuffer[ nSize - 1 ] = TEXT( '\0' ); HB_OSSTRDUP2( lpBuffer, szBuffer, nSize - 1 ); } hb_xfree( lpBuffer ); } hb_xfree( lpName ); } #elif defined( HB_OS_OS2 ) { PSZ EnvValue = ( PSZ ) ""; char * pszNameFree = NULL; szName = hb_osEncodeCP( szName, &pszNameFree, NULL ); fRetVal = DosScanEnv( ( PCSZ ) szName, &EnvValue ) == NO_ERROR; if( pszNameFree ) hb_xfree( pszNameFree ); if( fRetVal && szBuffer != NULL && nSize != 0 ) hb_osStrDecode2( ( char * ) EnvValue, szBuffer, nSize - 1 ); } #else { char * pszTemp, * pszNameFree = NULL; szName = hb_osEncodeCP( szName, &pszNameFree, NULL ); pszTemp = getenv( szName ); if( pszNameFree ) hb_xfree( pszNameFree ); if( pszTemp != NULL ) { fRetVal = HB_TRUE; if( szBuffer != NULL && nSize != 0 ) hb_osStrDecode2( pszTemp, szBuffer, nSize - 1 ); } else fRetVal = HB_FALSE; } #endif if( ! fRetVal && szBuffer != NULL && nSize != 0 ) szBuffer[ 0 ] = '\0'; return fRetVal; }