static HB_SIZE ct_StrFile( const char * pFileName, const char * pcStr, HB_SIZE nLen, HB_BOOL bOverwrite, HB_FOFFSET nOffset, HB_BOOL bTrunc ) { HB_FHANDLE hFile; HB_BOOL bOpen = HB_FALSE; HB_BOOL bFile = hb_fsFile( pFileName ); HB_SIZE nWrite = 0; if( bFile && bOverwrite ) { hFile = hb_fsOpen( pFileName, FO_READWRITE ); bOpen = HB_TRUE; } else if( ! bFile || ! ct_getsafety() ) hFile = hb_fsCreate( pFileName, ct_getfcreate() ); else hFile = FS_ERROR; if( hFile != FS_ERROR ) { if( nOffset ) hb_fsSeekLarge( hFile, nOffset, FS_SET ); else if( bOpen ) hb_fsSeek( hFile, 0, FS_END ); nWrite = hb_fsWriteLarge( hFile, pcStr, nLen ); if( ( nWrite == nLen ) && bOpen && bTrunc ) hb_fsWrite( hFile, NULL, 0 ); hb_fsClose( hFile ); } return nWrite; }
void hb_traceInit( void ) { FILE * fpTrace; PHB_DYNS pTraceLog = hb_dynsymFind( "TRACELOG" ); if( s_bDoInit && pTraceLog && pTraceLog->pSymbol->value.pFunPtr && hb_fsFile( "trace.log" ) ) { s_bDoInit = FALSE; // Might have been initialized if TraceLog() was called before traceInit! hb_threadLockInit( S_TRACEMTX ); /* Empty the file if it exists. */ fpTrace = hb_fopen( "trace.log", "w" ); if( fpTrace ) fclose( fpTrace ); } }
void wxTraceInit( void ) { FILE *fpTrace; #ifdef HB_THREAD_SUPPORT HB_CRITICAL_INIT( s_CriticalMutex ); #endif if( s_bEmpty && hb_fsFile( ( BYTE *) "trace.log" ) ) { /* Empty the file if it exists. */ fpTrace = fopen( LOG_NAME, "w" ); if( fpTrace ) { fclose( fpTrace ); } else { hb_errInternal( HB_EI_ERRUNRECOV, "Unable to create trace.log file", NULL, NULL ); } } }
BOOL hb_spFile( BYTE * pFilename, BYTE * pRetPath ) { BYTE *Path; BOOL bIsFile = FALSE; PHB_FNAME pFilepath; HB_TRACE(HB_TR_DEBUG, ("hb_spFile(%s, %p)", (char*) pFilename, pRetPath)); if( pRetPath ) { Path = pRetPath; } else { Path = (BYTE *) hb_xgrab( _POSIX_PATH_MAX + 1 ); } pFilepath = hb_fsFNameSplit( (char*) pFilename ); if( pFilepath->szPath ) { hb_fsFNameMerge( (char*) Path, pFilepath ); bIsFile = hb_fsFile( Path ); } else { char * szDefault = hb_set.HB_SET_DEFAULT; if( szDefault ) { pFilepath->szPath = szDefault; hb_fsFNameMerge( (char*) Path, pFilepath ); bIsFile = hb_fsFile( Path ); } if( !bIsFile && hb_set.HB_SET_PATH ) { HB_PATHNAMES *NextPath = hb_setGetFirstSetPath(); while( bIsFile == FALSE && NextPath ) { pFilepath->szPath = NextPath->szPath; hb_fsFNameMerge( (char*) Path, pFilepath ); bIsFile = hb_fsFile( Path ); NextPath = NextPath->pNext; } } /* * This code is intentional. To eliminate race condition, * in pending hb_spCreate()/hb_spOpen() call when we have to know * real path and file name we have to set its deterministic value * here. If it's not necessary the caller may drop this value. */ if( ! bIsFile ) { pFilepath->szPath = szDefault ? szDefault : ( char * ) "."; hb_fsFNameMerge( (char*) Path, pFilepath ); } } hb_xfree( pFilepath ); if( pRetPath == NULL ) { hb_xfree( Path ); } return bIsFile; }
int hb_CmpTdSpanStd( char * szFile, char * szFiletoCompress, int iCompLevel, PHB_ITEM pBlock, BOOL bOverWrite, char * szPassWord, int iSpanSize, BOOL bPath, BOOL bDrive, PHB_ITEM pProgress ) { DWORD dwSize; BOOL bAdded = FALSE; BOOL bReturn = TRUE; BOOL bFileExist = hb_fsFile( szFile ); CZipArchive szZip; SpanCallbackc span; SpanActionCallbackc spanac; szZip.SetSpanCallback( &span ); if( iSpanSize == 0 ) { iSpanSize = 1457664; } try { if( ( bFileExist && bOverWrite ) || ! bFileExist ) { szZip.Open( szFile, CZipArchive::zipCreateSpan, iSpanSize ); } else { return ( int ) false; } } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } if( szPassWord != NULL ) { szZip.SetPassword( szPassWord ); } if( pZipI.szComment != NULL ) { szZip.SetGlobalComment( pZipI.szComment ); hb_xfree( pZipI.szComment ); } if( HB_IS_BLOCK( pProgress ) ) { pProgressInfo = pProgress; szZip.SetCallback( &spanac ); } if( bReturn ) { try { if( szPassWord != NULL ) { szZip.SetPassword( szPassWord ); } dwSize = GetCurrentFileSize( szFiletoCompress ); if( pBlock != NULL ) { PHB_ITEM FileName = hb_itemPutC( NULL, szFiletoCompress ); hb_vmEvalBlockV( pBlock, 1, FileName ); hb_itemRelease( FileName ); } #if defined( __WIN32__ ) || defined( __MINGW32__ ) if( bDrive && ! bAdded ) { if( ! szZip.AddNewFileDrv( szFiletoCompress, iCompLevel, true, CZipArchive::zipsmSafeSmart, 65536 ) ) { bReturn = FALSE; } else { bAdded = TRUE; } } #endif if( bPath && ! bAdded ) { if( ! szZip.AddNewFile( szFiletoCompress, iCompLevel, true, CZipArchive::zipsmSafeSmart, 65536 ) ) { bReturn = FALSE; } else { bAdded = TRUE; } } else if( ! bDrive && ! bPath && ! bAdded ) { if( ! szZip.AddNewFile( szFiletoCompress, iCompLevel, false, CZipArchive::zipsmSafeSmart, 65536 ) ) { bReturn = FALSE; } } } catch( ... ) { } } try { szZip.Close(); } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } if( pProgressInfo ) { hb_itemRelease( pProgressInfo ); } return ( int ) bReturn; }
int hb_CmpTdSpan( const char * szFile, PHB_ITEM pArray, int iCompLevel, PHB_ITEM pBlock, BOOL bOverWrite, const char * szPassWord, int iSpanSize, BOOL bPath, BOOL bDrive, PHB_ITEM pProgress ) { ULONG ulCount = 0; const char * szDummy; DWORD dwSize; BOOL bAdded = FALSE; BOOL bReturn = TRUE; BOOL bFileExist = hb_fsFile( szFile ); CZipArchive szZip; SpanCallbackc span; SpanActionCallbackc spanac; szZip.SetSpanCallback( &span ); if( iSpanSize == 0 ) { iSpanSize = 1457664; } try { if( ( bFileExist && bOverWrite ) || ! bFileExist ) { szZip.Open( szFile, CZipArchive::zipCreateSpan, iSpanSize ); } else { bReturn = FALSE; return ( int ) bReturn; } } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } //if (! bReturn ) //{ if( szPassWord != NULL ) { szZip.SetPassword( szPassWord ); } if( pZipI.szComment != NULL ) { szZip.SetGlobalComment( pZipI.szComment ); hb_xfree( pZipI.szComment ); } if( HB_IS_BLOCK( pProgress ) ) { pProgressInfo = pProgress; szZip.SetCallback( &spanac ); } for( ulCount = 1; ( ulCount <= hb_arrayLen( pArray ) ); ulCount++ ) { szDummy = ( char * ) hb_arrayGetCPtr( pArray, ulCount ); dwSize = GetCurrentFileSize( szDummy ); bAdded = FALSE; if( dwSize != ( DWORD ) -1 ) { if( pBlock != NULL ) { PHB_ITEM FileName = hb_itemPutC( NULL, hb_arrayGetCPtr( pArray, ulCount ) ), FilePos = hb_itemPutNI( NULL, ulCount ); hb_vmEvalBlockV( pBlock, 2, FileName, FilePos ); hb_itemRelease( FileName ); hb_itemRelease( FilePos ); } try { if( bPath && ! bAdded ) { szZip.AddNewFile( szDummy, iCompLevel, true, CZipArchive::zipsmSafeSmart, 65536 ); bAdded = TRUE; } else if( ! bDrive && ! bPath && ! bAdded ) { szZip.AddNewFile( szDummy, iCompLevel, false, CZipArchive::zipsmSafeSmart, 65536 ); } } catch( ... ) { } } } //} try { szZip.Close(); } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } return ( int ) bReturn; }
int hb_CompressFile( const char * szFile, PHB_ITEM pArray, int iCompLevel, PHB_ITEM pBlock, BOOL bOverWrite, const char * szPassWord, BOOL bPath, BOOL bDrive, PHB_ITEM pProgress ) { ULONG ulCount = 0; const char * szDummy; char * szDummyLower = NULL; char * szFileLower = hb_strdup( ( char * ) szFile ); BOOL bFileExist = hb_fsFile( szFile ); BOOL bAdded = FALSE; BOOL bReturn = TRUE; DWORD dwSize; CZipArchive szZip; SpanCallbackc span; SpanActionCallbackc spanac; szZip.SetSpanCallback( &span ); #ifdef HB_OS_WIN_32 hb_strLower( szFileLower, strlen( szFileLower ) ); #endif try { if( ( bFileExist && bOverWrite ) || ! bFileExist ) { szZip.Open( szFile, CZipArchive::zipCreate, 0 ); } else { szZip.Open( szFile, CZipArchive::zipOpen, 0 ); } } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } if( bReturn ) { if( szPassWord != NULL ) { szZip.SetPassword( szPassWord ); } if( pZipI.szComment != NULL ) { szZip.SetGlobalComment( pZipI.szComment ); hb_xfree( pZipI.szComment ); } if( HB_IS_BLOCK( pProgress ) ) { pProgressInfo = pProgress; szZip.SetCallback( &spanac ); } for( ulCount = 1; ( ulCount <= hb_arrayLen( pArray ) ); ulCount++ ) { szDummy = ( char * ) hb_arrayGetCPtr( pArray, ulCount ); dwSize = GetCurrentFileSize( szDummy ); bAdded = FALSE; szDummyLower = hb_strdup( ( char * ) szDummy ); #ifdef HB_OS_WIN_32 hb_strLower( szDummyLower, strlen( szDummyLower ) ); #endif // Prevent adding current archive file ! if( strstr( szFileLower, szDummyLower ) == NULL && strstr( szDummyLower, szFileLower ) == NULL ) { if( dwSize != ( DWORD ) -1 ) { if( pBlock != NULL ) { PHB_ITEM FileName = hb_itemPutC( NULL, hb_arrayGetCPtr( pArray, ulCount ) ), FilePos = hb_itemPutNI( NULL, ulCount ); hb_vmEvalBlockV( pBlock, 2, FileName, FilePos ); hb_itemRelease( FileName ); hb_itemRelease( FilePos ); } try { if( bPath && ! bAdded ) { szZip.AddNewFile( szDummy, iCompLevel, true, CZipArchive::zipsmSafeSmart, 65536 ); bAdded = TRUE; } else if( ! bDrive && ! bPath && ! bAdded ) { szZip.AddNewFile( szDummy, iCompLevel, false, CZipArchive::zipsmSafeSmart, 65536 ); } } catch( ... ) { } } } hb_xfree( szDummyLower ); } } hb_xfree( szFileLower ); try { szZip.Close(); } catch( CZipException ) { bReturn = FALSE; } catch( ... ) { } return ( int ) bReturn; }
HB_BOOL hb_spFile( const char * pszFileName, char * pszRetPath ) { char * pszPath; HB_BOOL bIsFile = HB_FALSE; PHB_FNAME pFilepath; HB_TRACE( HB_TR_DEBUG, ( "hb_spFile(%s, %p)", pszFileName, pszRetPath ) ); if( pszRetPath ) pszPath = pszRetPath; else pszPath = ( char * ) hb_xgrab( HB_PATH_MAX ); pFilepath = hb_fsFNameSplit( pszFileName ); if( pFilepath->szPath ) { hb_fsFNameMerge( pszPath, pFilepath ); bIsFile = hb_fsFile( pszPath ); } else { const char * szDefault = hb_setGetDefault(); if( szDefault ) { pFilepath->szPath = szDefault; hb_fsFNameMerge( pszPath, pFilepath ); bIsFile = hb_fsFile( pszPath ); } if( ! bIsFile && hb_setGetPath() ) { HB_PATHNAMES * pNextPath = hb_setGetFirstSetPath(); while( bIsFile == HB_FALSE && pNextPath ) { pFilepath->szPath = pNextPath->szPath; hb_fsFNameMerge( pszPath, pFilepath ); bIsFile = hb_fsFile( pszPath ); pNextPath = pNextPath->pNext; } } /* * This code is intentional. To eliminate race condition, * in pending hb_spCreate()/hb_spOpen() call when we have to know * real path and file name we have to set its deterministic value * here. If it's not necessary the caller may drop this value. */ if( ! bIsFile ) { pFilepath->szPath = szDefault ? szDefault : "."; hb_fsFNameMerge( pszPath, pFilepath ); } } hb_xfree( pFilepath ); if( pszRetPath == NULL ) hb_xfree( pszPath ); return bIsFile; }