From 6e8622e79a8eb4fde790598226407aae5798cf4b Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Thu, 27 Apr 2006 19:09:56 +0000 Subject: [PATCH] Updates, etc. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@360 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- ftk/Makefile | 4 +- ftk/src/ftk.h | 20 +- ftk/src/ftkerror.cpp | 3 +- ftk/src/ftkfsys.cpp | 83 ++++ ftk/src/ftkmem.cpp | 14 + ftk/src/ftkmisc.cpp | 27 ++ ftk/src/ftkntab.cpp | 92 ++-- ftk/src/ftkstrm.cpp | 1005 ------------------------------------------ ftk/src/ftksys.h | 626 ++++++++++++++++++++++++-- ftk/src/ftkunix.cpp | 33 +- ftk/src/ftkwin.cpp | 25 +- 11 files changed, 778 insertions(+), 1154 deletions(-) diff --git a/ftk/Makefile b/ftk/Makefile index e79bfa9..52ec38e 100644 --- a/ftk/Makefile +++ b/ftk/Makefile @@ -1090,7 +1090,7 @@ sample_exe = $(sample_dir)/sample$(exe_suffix) # -- Make system pattern search paths -- -vpath %.cpp src util sample +vpath %.cpp src util # -- Default target -- @@ -1486,7 +1486,9 @@ allutils: status dircheck libs $(util_targets) .PHONY : test test: status dircheck $(ftk_static_lib) $(test_targets) + $(ec)$(gprintf) "Running unit tests ... \n" $(ec)$(call runtest,ftktest) + $(ec)$(gprintf) "Done.\n" .PHONY : debug debug: diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index dd03ef2..f181b87 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -966,6 +966,10 @@ virtual RCODE FLMAPI deleteFile( const char * pszFileName) = 0; + virtual RCODE FLMAPI deleteMultiFileStream( + const char * pszDirectory, + const char * pszBaseName) = 0; + virtual RCODE FLMAPI copyFile( const char * pszSrcFileName, const char * pszDestFileName, @@ -1010,6 +1014,10 @@ virtual FLMBOOL FLMAPI doesFileMatch( const char * pszFileName, const char * pszTemplate) = 0; + + virtual RCODE FLMAPI writeToOStream( + IF_IStream * pIStream, + IF_OStream * pOStream) = 0; }; RCODE FLMAPI FlmGetFileSystem( @@ -2345,11 +2353,11 @@ const void * pvStr2, FLMSIZET uiLength); - FLMINT FLMAPI f_strcat( + char * FLMAPI f_strcat( char * pszDest, const char * pszSrc); - FLMINT FLMAPI f_strncat( + char * FLMAPI f_strncat( char * pszDest, const char * pszSrc, FLMSIZET uiLength); @@ -3080,10 +3088,7 @@ FLMUINT uiTagNum) = 0; virtual RCODE FLMAPI cloneNameTable( - IF_NameTable * pSrcNameTable) = 0; - - virtual RCODE FLMAPI importFromNameTable( - IF_NameTable * pSrcNameTable) = 0; + IF_NameTable ** ppNewNameTable) = 0; }; /**************************************************************************** @@ -3327,7 +3332,6 @@ #define RC_BAD( rc) ((rc) != 0) #endif - #define FLM_ERROR_BASE(e) ((RCODE)((int)(0x81050000+(e)))) #define FTK_ERROR_BASE(e) ((RCODE)((int)(0x81055000+(e)))) const char * FLMAPI f_errorString( @@ -3380,7 +3384,7 @@ #define NE_FLM_BTREE_FULL FTK_ERROR_BASE( 0x127) // B-tree cannot grow beyond current size #define NE_FLM_BTREE_BAD_STATE FTK_ERROR_BASE( 0x128) // B-tree operation cannot be completed #define NE_FLM_COULD_NOT_CREATE_MUTEX FTK_ERROR_BASE( 0x129) // Mutex alloc / init failed - #define NE_FLM_LAST_GENERAL_ERROR FTK_ERROR_BASE( 0x130) // NOTE: This is not an error code - do not document + #define NE_FLM_LAST_GENERAL_ERROR FTK_ERROR_BASE( 0x12A) // NOTE: This is not an error code - do not document /**************************************************************************** Desc: I/O Errors diff --git a/ftk/src/ftkerror.cpp b/ftk/src/ftkerror.cpp index d649706..ad34cd4 100644 --- a/ftk/src/ftkerror.cpp +++ b/ftk/src/ftkerror.cpp @@ -78,7 +78,8 @@ F_ERROR_CODE_MAP gv_FlmGeneralErrors[ flmErrorCodeEntry( NE_FLM_BTREE_ERROR), flmErrorCodeEntry( NE_FLM_BTREE_KEY_SIZE), flmErrorCodeEntry( NE_FLM_BTREE_FULL), - flmErrorCodeEntry( NE_FLM_BTREE_BAD_STATE) + flmErrorCodeEntry( NE_FLM_BTREE_BAD_STATE), + flmErrorCodeEntry( NE_FLM_COULD_NOT_CREATE_MUTEX) }; /**************************************************************************** diff --git a/ftk/src/ftkfsys.cpp b/ftk/src/ftkfsys.cpp index b7439da..92cf3d8 100644 --- a/ftk/src/ftkfsys.cpp +++ b/ftk/src/ftkfsys.cpp @@ -120,6 +120,10 @@ public: RCODE FLMAPI deleteFile( const char * pszFileName); + RCODE FLMAPI deleteMultiFileStream( + const char * pszDirectory, + const char * pszBaseName); + RCODE FLMAPI copyFile( const char * pszSrcFileName, const char * pszDestFileName, @@ -169,6 +173,10 @@ public: const char * pszFileName, FLMBOOL bReadOnly); + RCODE FLMAPI writeToOStream( + IF_IStream * pIStream, + IF_OStream * pOStream); + private: #if defined( FLM_UNIX) @@ -2077,3 +2085,78 @@ FLMBOOL FLMAPI F_FileSystem::doesFileMatch( return( (*pszFileName != 0) ? FALSE : TRUE); } + +/**************************************************************************** +Desc: +*****************************************************************************/ +RCODE FLMAPI F_FileSystem::deleteMultiFileStream( + const char * pszDirectory, + const char * pszBaseName) +{ + RCODE rc = NE_FLM_OK; + F_MultiFileOStream * pMultiStream = NULL; + + if( (pMultiStream = f_new F_MultiFileOStream) == NULL) + { + rc = RC_SET( NE_FLM_MEM); + goto Exit; + } + + if( RC_BAD( rc = pMultiStream->processDirectory( + pszDirectory, pszBaseName, TRUE))) + { + goto Exit; + } + +Exit: + + if( pMultiStream) + { + pMultiStream->Release(); + } + + return( rc); +} + +/****************************************************************************** +Desc: Read all data from input stream and write to the output stream. +******************************************************************************/ +RCODE FLMAPI F_FileSystem::writeToOStream( + IF_IStream * pIStream, + IF_OStream * pOStream) +{ + RCODE rc = NE_FLM_OK; + FLMBYTE ucBuffer[ 512]; + FLMUINT uiBufferSize = sizeof( ucBuffer); + FLMUINT uiBytesToWrite; + FLMUINT uiBytesRead; + + for (;;) + { + if( RC_BAD( rc = pIStream->read( + ucBuffer, uiBufferSize, &uiBytesRead))) + { + if( rc != NE_FLM_EOF_HIT) + { + goto Exit; + } + + rc = NE_FLM_OK; + + if (!uiBytesRead) + { + goto Exit; + } + } + + uiBytesToWrite = uiBytesRead; + if( RC_BAD( rc = pOStream->write( ucBuffer, uiBytesToWrite))) + { + goto Exit; + } + } + +Exit: + + return( rc); +} diff --git a/ftk/src/ftkmem.cpp b/ftk/src/ftkmem.cpp index cf60b1e..fcaa782 100644 --- a/ftk/src/ftkmem.cpp +++ b/ftk/src/ftkmem.cpp @@ -4259,6 +4259,20 @@ void * F_Base::operator new[]( return( pvReturnPtr); } +/**************************************************************************** +Desc: +****************************************************************************/ +void F_Base::operator delete( + void * ptr) +{ + if( !ptr) + { + return; + } + + f_freeImp( &ptr, TRUE); +} + /**************************************************************************** Desc: ****************************************************************************/ diff --git a/ftk/src/ftkmisc.cpp b/ftk/src/ftkmisc.cpp index 8e07912..0245922 100644 --- a/ftk/src/ftkmisc.cpp +++ b/ftk/src/ftkmisc.cpp @@ -28,10 +28,18 @@ FLMUINT gv_uiStartupCount = 0; FLMUINT gv_uiSerialInitCount = 0; F_MUTEX gv_hSerialMutex = F_MUTEX_NULL; +FLMBOOL gv_bOkToDoAsyncWrites = TRUE; +FLMUINT gv_uiMaxFileSize = FLM_MAXIMUM_FILE_SIZE; IF_FileSystem * gv_pFileSystem = NULL; IF_RandomGenerator * gv_pSerialRandom = NULL; IF_ThreadMgr * gv_pThreadMgr = NULL; +#ifdef FLM_LINUX +FLMUINT gv_uiLinuxMajorVer = 0; +FLMUINT gv_uiLinuxMinorVer = 0; +FLMUINT gv_uiLinuxRevision = 0; +#endif + FSTATIC RCODE f_initSerialNumberGenerator( void); FSTATIC void f_freeSerialNumberGenerator( void); @@ -78,6 +86,25 @@ RCODE FLMAPI ftkStartup( void) { goto Exit; } + +#if defined( FLM_LINUX) + flmGetLinuxKernelVersion( &gv_uiLinuxMajorVer, &gv_uiLinuxMinorVer, + &gv_uiLinuxRevision); + gv_uiMaxFileSize = flmGetLinuxMaxFileSize(); +#elif defined( FLM_AIX) + + // Call set setrlimit to increase the max allowed file size. + // We don't have a good way to deal with any errors returned by + // setrlimit(), so we just hope that there aren't any... + + struct rlimit rlim; + + rlim.rlim_cur = RLIM_INFINITY; + rlim.rlim_max = RLIM_INFINITY; + + setrlimit( RLIMIT_FSIZE, &rlim); +#endif + Exit: diff --git a/ftk/src/ftkntab.cpp b/ftk/src/ftkntab.cpp index 880e69d..b40c250 100644 --- a/ftk/src/ftkntab.cpp +++ b/ftk/src/ftkntab.cpp @@ -135,10 +135,7 @@ public: FLMUINT uiTagNum); RCODE FLMAPI cloneNameTable( - IF_NameTable * pSrcNameTable); - - RCODE FLMAPI importFromNameTable( - IF_NameTable * pSrcNameTable); + IF_NameTable ** ppNewNameTable); FLMINT FLMAPI AddRef( void); @@ -1830,20 +1827,28 @@ void FLMAPI F_NameTable::removeTag( } /**************************************************************************** -Desc: Clone a name table from another one +Desc: Create a clone of this name table ****************************************************************************/ -#if 0 RCODE FLMAPI F_NameTable::cloneNameTable( - IF_NameTable * pSrcNameTable) + IF_NameTable ** ppNewNameTable) { RCODE rc = NE_FLM_OK; FLMUINT uiLoop; FLM_TAG_INFO * pTagInfo; FLMUINT uiPoolBlkSize; + F_NameTable * pNewNameTable = NULL; + + // Allocate a new name table + + if( (pNewNameTable = f_new F_NameTable) == NULL) + { + rc = RC_SET( NE_FLM_MEM); + goto Exit; + } // Set the pool size to be as optimal as possible. - uiPoolBlkSize = pSrcNameTable->m_uiMemoryAllocated / 8; + uiPoolBlkSize = m_uiMemoryAllocated / 8; if (uiPoolBlkSize < 1024) { uiPoolBlkSize = 1024; @@ -1852,87 +1857,42 @@ RCODE FLMAPI F_NameTable::cloneNameTable( { uiPoolBlkSize = 65536; } - clearTable( uiPoolBlkSize); + + pNewNameTable->clearTable( uiPoolBlkSize); // Pre-allocate exactly enough table space - if (RC_BAD( rc = reallocSortTables( pSrcNameTable->m_uiNumTags))) + if (RC_BAD( rc = pNewNameTable->reallocSortTables( m_uiNumTags))) { goto Exit; } // Add all of the tags - for (uiLoop = 0; uiLoop < pSrcNameTable->m_uiNumTags; uiLoop++) + for (uiLoop = 0; uiLoop < m_uiNumTags; uiLoop++) { - pTagInfo = pSrcNameTable->m_ppSortedByTagTypeAndNum [uiLoop]; - if (RC_BAD( rc = addTag( pTagInfo->uiType, pTagInfo->puzTagName, NULL, - pTagInfo->uiTagNum, - pTagInfo->uiDataType, - pTagInfo->puzNamespace, FALSE))) + pTagInfo = m_ppSortedByTagTypeAndNum [uiLoop]; + if (RC_BAD( rc = pNewNameTable->addTag( + pTagInfo->uiType, pTagInfo->puzTagName, NULL, pTagInfo->uiTagNum, + pTagInfo->uiDataType, pTagInfo->puzNamespace, FALSE))) { goto Exit; } } - sortTags(); + pNewNameTable->sortTags(); + *ppNewNameTable = pNewNameTable; + pNewNameTable = NULL; Exit: - return( rc); -} -#endif - -/**************************************************************************** -Desc: Copy a name table from another one. This differs from cloneNameTable - in that it doesn't clear the name table, it just copies the names. - Thus, the destination name table may already have names in it, and the - names from the source table will just be added. -****************************************************************************/ -#if 0 -RCODE FLMAPI F_NameTable::importFromNameTable( - IF_NameTable * pSrcNameTable) -{ - RCODE rc = NE_FLM_OK; - FLMUINT uiLoop; - FLM_TAG_INFO * pTagInfo; - - // Pre-allocate exactly enough table space - - if (RC_BAD( rc = reallocSortTables( m_uiNumTags + - pSrcNameTable->m_uiNumTags))) + if( pNewNameTable) { - goto Exit; + pNewNameTable->Release(); } - // Add all of the tags from the source table - - for (uiLoop = 0; uiLoop < pSrcNameTable->m_uiNumTags; uiLoop++) - { - pTagInfo = pSrcNameTable->m_ppSortedByTagTypeAndNum [uiLoop]; - if (RC_BAD( rc = addTag( pTagInfo->uiType, pTagInfo->puzTagName, NULL, - pTagInfo->uiTagNum, - pTagInfo->uiDataType, - pTagInfo->puzNamespace, FALSE))) - { - if (rc != NE_FLM_EXISTS) - { - goto Exit; - } - else - { - rc = NE_FLM_OK; - } - } - } - - sortTags(); - -Exit: - return( rc); } -#endif /**************************************************************************** Desc: Increment use count on this object. diff --git a/ftk/src/ftkstrm.cpp b/ftk/src/ftkstrm.cpp index 71b4d86..1c3408a 100644 --- a/ftk/src/ftkstrm.cpp +++ b/ftk/src/ftkstrm.cpp @@ -35,506 +35,6 @@ #define MULTI_FILE_OUT_STREAM_MIN_FILE_SIZE 1048510 #define MULTI_FILE_OUT_STREAM_MAX_FILE_SIZE 2147483647 -/**************************************************************************** -Desc: -****************************************************************************/ -class F_IStream : public IF_IStream, public F_Base -{ -public: - - F_IStream(); - - virtual ~F_IStream(); -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_OStream : public IF_OStream, public F_Base -{ -public: - - F_OStream(); - - virtual ~F_OStream(); - -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_PosIStream : public IF_PosIStream, public F_Base -{ -public: - - F_PosIStream(); - - virtual ~F_PosIStream(); - -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_BufferIStream : public IF_BufferIStream, public F_Base -{ -public: - - F_BufferIStream() - { - m_pucBuffer = NULL; - m_uiBufferLen = 0; - m_uiOffset = 0; - m_bAllocatedBuffer = FALSE; - m_bIsOpen = FALSE; - } - - virtual ~F_BufferIStream(); - - RCODE FLMAPI open( - const FLMBYTE * pucBuffer, - FLMUINT uiLength, - FLMBYTE ** ppucAllocatedBuffer = NULL); - - FINLINE FLMUINT64 FLMAPI totalSize( void) - { - flmAssert( m_bIsOpen); - return( m_uiBufferLen); - } - - FINLINE FLMUINT64 FLMAPI remainingSize( void) - { - flmAssert( m_bIsOpen); - return( m_uiBufferLen - m_uiOffset); - } - - RCODE FLMAPI close( void); - - FINLINE RCODE FLMAPI positionTo( - FLMUINT64 ui64Position) - { - flmAssert( m_bIsOpen); - - if( ui64Position < m_uiBufferLen) - { - m_uiOffset = (FLMUINT)ui64Position; - } - else - { - m_uiOffset = m_uiBufferLen; - } - - return( NE_FLM_OK); - } - - FINLINE FLMUINT64 FLMAPI getCurrPosition( void) - { - flmAssert( m_bIsOpen); - return( m_uiOffset); - } - - RCODE FLMAPI read( - void * pvBuffer, - FLMUINT uiBytesToRead, - FLMUINT * puiBytesRead); - - FINLINE const FLMBYTE * getBuffer( void) - { - flmAssert( m_bIsOpen); - return( m_pucBuffer); - } - - FINLINE const FLMBYTE * getBufferAtCurrentOffset( void) - { - flmAssert( m_bIsOpen); - return( m_pucBuffer ? &m_pucBuffer[ m_uiOffset] : NULL); - } - - FINLINE void truncate( - FLMUINT uiOffset) - { - flmAssert( m_bIsOpen); - flmAssert( uiOffset >= m_uiOffset); - flmAssert( uiOffset <= m_uiBufferLen); - - m_uiBufferLen = uiOffset; - } - - FINLINE FLMBOOL isOpen( void) - { - return( m_bIsOpen); - } - -private: - - const FLMBYTE * m_pucBuffer; - FLMUINT m_uiBufferLen; - FLMUINT m_uiOffset; - FLMBOOL m_bAllocatedBuffer; - FLMBOOL m_bIsOpen; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_FileIStream : public F_PosIStream -{ -public: - - F_FileIStream() - { - m_pFileHdl = NULL; - m_ui64FileOffset = 0; - } - - virtual ~F_FileIStream() - { - if( m_pFileHdl) - { - m_pFileHdl->Release(); - } - } - - RCODE FLMAPI open( - const char * pszPath); - - RCODE FLMAPI close( void); - - RCODE FLMAPI positionTo( - FLMUINT64 ui64Position); - - FLMUINT64 FLMAPI totalSize( void); - - FLMUINT64 FLMAPI remainingSize( void); - - FLMUINT64 FLMAPI getCurrPosition( void); - - RCODE FLMAPI read( - void * pvBuffer, - FLMUINT uiBytesToRead, - FLMUINT * puiBytesRead); - -private: - - IF_FileHdl * m_pFileHdl; - FLMUINT64 m_ui64FileOffset; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_BufferedIStream : public F_PosIStream -{ -public: - - F_BufferedIStream() - { - m_pIStream = NULL; - m_pucBuffer = NULL; - } - - virtual ~F_BufferedIStream() - { - close(); - } - - RCODE FLMAPI open( - IF_IStream * pIStream, - FLMUINT uiBufferSize); - - RCODE FLMAPI read( - void * pvBuffer, - FLMUINT uiBytesToRead, - FLMUINT * puiBytesRead); - - RCODE FLMAPI close( void); - - FINLINE FLMUINT64 FLMAPI totalSize( void) - { - if (!m_pIStream) - { - flmAssert( 0); - return( 0); - } - - return( m_uiBytesAvail); - } - - FINLINE FLMUINT64 FLMAPI remainingSize( void) - { - if( !m_pIStream) - { - flmAssert( 0); - return( 0); - } - - return( m_uiBytesAvail - m_uiBufferOffset); - } - - FINLINE RCODE FLMAPI positionTo( - FLMUINT64 ui64Position) - { - if( !m_pIStream) - { - flmAssert( 0); - return( RC_SET( NE_FLM_ILLEGAL_OP)); - } - - if( ui64Position < m_uiBytesAvail) - { - m_uiBufferOffset = (FLMUINT)ui64Position; - } - else - { - m_uiBufferOffset = m_uiBytesAvail; - } - - return( NE_FLM_OK); - } - - FINLINE FLMUINT64 FLMAPI getCurrPosition( void) - { - if( !m_pIStream) - { - flmAssert( 0); - return( 0); - } - - return( m_uiBufferOffset); - } - -private: - - IF_IStream * m_pIStream; - FLMBYTE * m_pucBuffer; - FLMUINT m_uiBufferSize; - FLMUINT m_uiBufferOffset; - FLMUINT m_uiBytesAvail; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_BufferedOStream : public F_OStream -{ -public: - - F_BufferedOStream() - { - m_pOStream = NULL; - m_pucBuffer = NULL; - } - - virtual ~F_BufferedOStream() - { - close(); - } - - RCODE FLMAPI open( - IF_OStream * pOStream, - FLMUINT uiBufferSize); - - RCODE FLMAPI write( - const void * pvBuffer, - FLMUINT uiBytesToWrite, - FLMUINT * puiBytesWritten); - - RCODE FLMAPI close( void); - - RCODE FLMAPI flush( void); - -private: - - IF_OStream * m_pOStream; - FLMBYTE * m_pucBuffer; - FLMUINT m_uiBufferSize; - FLMUINT m_uiBufferOffset; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_FileOStream : public F_OStream -{ -public: - - F_FileOStream() - { - m_pFileHdl = NULL; - } - - virtual ~F_FileOStream() - { - close(); - } - - RCODE FLMAPI open( - const char * pszFilePath, - FLMBOOL bTruncateIfExists); - - RCODE FLMAPI write( - const void * pvBuffer, - FLMUINT uiBytesToWrite, - FLMUINT * puiBytesWritten); - - RCODE FLMAPI close( void); - -private: - - IF_FileHdl * m_pFileHdl; - FLMUINT64 m_ui64FileOffset; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_MultiFileIStream : public F_IStream -{ -public: - - F_MultiFileIStream() - { - m_pIStream = NULL; - m_bOpen = FALSE; - } - - virtual ~F_MultiFileIStream() - { - close(); - } - - RCODE FLMAPI open( - const char * pszDirectory, - const char * pszBaseName); - - RCODE FLMAPI read( - void * pvBuffer, - FLMUINT uiBytesToRead, - FLMUINT * puiBytesRead); - - RCODE FLMAPI close( void); - -private: - - RCODE rollToNextFile( void); - - IF_IStream * m_pIStream; - FLMBOOL m_bOpen; - FLMBOOL m_bEndOfStream; - FLMUINT m_uiFileNum; - FLMUINT64 m_ui64FileOffset; - char m_szDirectory[ F_PATH_MAX_SIZE + 1]; - char m_szBaseName[ F_PATH_MAX_SIZE + 1]; -}; - -/**************************************************************************** -Desc: -****************************************************************************/ -class F_MultiFileOStream : public F_OStream -{ -public: - - F_MultiFileOStream() - { - m_pOStream = NULL; - m_bOpen = FALSE; - } - - virtual ~F_MultiFileOStream() - { - close(); - } - - RCODE create( - const char * pszDirectory, - const char * pszBaseName, - FLMUINT uiMaxFileSize, - FLMBOOL bOkToOverwrite); - - RCODE FLMAPI write( - const void * pvBuffer, - FLMUINT uiBytesToWrite, - FLMUINT * puiBytesWritten); - - RCODE FLMAPI close( void); - -private: - - RCODE rollToNextFile( void); - - RCODE processDirectory( - const char * pszDirectory, - const char * pszBaseName, - FLMBOOL bOkToDelete); - - F_OStream * m_pOStream; - FLMBOOL m_bOpen; - FLMUINT m_uiFileNum; - FLMUINT64 m_ui64MaxFileSize; - FLMUINT64 m_ui64FileOffset; - char m_szDirectory[ F_PATH_MAX_SIZE + 1]; - char m_szBaseName[ F_PATH_MAX_SIZE + 1]; - - friend class F_DbSystem; -}; - -/**************************************************************************** -Desc: Decodes an ASCII base64 stream to binary -****************************************************************************/ -class F_Base64DecoderIStream : public F_IStream -{ -public: - - F_Base64DecoderIStream() - { - m_pIStream = NULL; - m_uiBufOffset = 0; - m_uiAvailBytes = 0; - } - - virtual ~F_Base64DecoderIStream() - { - close(); - } - - RCODE FLMAPI open( - IF_IStream * pIStream); - - RCODE FLMAPI read( - void * pvBuffer, - FLMUINT uiBytesToRead, - FLMUINT * puiBytesRead); - - FINLINE RCODE FLMAPI close( void) - { - RCODE rc = NE_FLM_OK; - - if( m_pIStream) - { - if( m_pIStream->getRefCount() == 1) - { - rc = m_pIStream->close(); - } - - m_pIStream->Release(); - m_pIStream = NULL; - } - - m_uiAvailBytes = 0; - m_uiBufOffset = 0; - - return( rc); - } - -private: - - IF_IStream * m_pIStream; - FLMUINT m_uiBufOffset; - FLMUINT m_uiAvailBytes; - FLMBYTE m_ucBuffer[ 8]; - static FLMBYTE m_ucDecodeTable[ 256]; -}; - /**************************************************************************** Desc: ****************************************************************************/ @@ -1640,40 +1140,6 @@ Exit: return( rc); } -/**************************************************************************** -Desc: -*****************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::removeMultiFileStream( - const char * pszDirectory, - const char * pszBaseName) -{ - RCODE rc = NE_FLM_OK; - F_MultiFileOStream * pMultiStream = NULL; - - if( (pMultiStream = f_new F_MultiFileOStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pMultiStream->processDirectory( - pszDirectory, pszBaseName, TRUE))) - { - goto Exit; - } - -Exit: - - if( pMultiStream) - { - pMultiStream->Release(); - } - - return( rc); -} -#endif - /**************************************************************************** Desc: *****************************************************************************/ @@ -3007,477 +2473,6 @@ RCODE FLMAPI F_UncompressingIStream::close( void) return( NE_FLM_OK); } -/**************************************************************************** -Desc: -*****************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openBufferIStream( - const char * pucBuffer, - FLMUINT uiLength, - IF_PosIStream ** ppIStream) -{ - RCODE rc = NE_FLM_OK; - F_BufferIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_BufferIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( (FLMBYTE *)pucBuffer, uiLength))) - { - goto Exit; - } - - if( *ppIStream) - { - (*ppIStream)->Release(); - } - - *ppIStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return an input stream that reads from multiple files. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openMultiFileIStream( - const char * pszDirectory, - const char * pszBaseName, - IF_IStream ** ppIStream) -{ - RCODE rc = NE_FLM_OK; - F_MultiFileIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_MultiFileIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pszDirectory, pszBaseName))) - { - goto Exit; - } - - *ppIStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return a buffered input stream from pIStream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openBufferedIStream( - IF_IStream * pIStream, - FLMUINT uiBufferSize, - IF_IStream ** ppIStream) -{ - RCODE rc = NE_FLM_OK; - F_BufferedIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_BufferedIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pIStream, uiBufferSize))) - { - goto Exit; - } - - *ppIStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openUncompressingIStream( - IF_IStream * pIStream, - IF_IStream ** ppIStream) -{ - RCODE rc = NE_FLM_OK; - F_UncompressingIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_UncompressingIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pIStream))) - { - goto Exit; - } - - *ppIStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return a compressing output stream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openCompressingOStream( - IF_OStream * pOStream, - IF_OStream ** ppOStream) -{ - RCODE rc = NE_FLM_OK; - F_CompressingOStream * pNewOStream = NULL; - - if( (pNewOStream = f_new F_CompressingOStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewOStream->open( pOStream))) - { - goto Exit; - } - - *ppOStream = pNewOStream; - pNewOStream = NULL; - -Exit: - - if( pNewOStream) - { - pNewOStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return a file output stream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openFileOStream( - const char * pszFileName, - FLMBOOL bTruncateIfExists, - IF_OStream ** ppOStream) -{ - RCODE rc = NE_FLM_OK; - F_FileOStream * pNewOStream = NULL; - - if( (pNewOStream = f_new F_FileOStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewOStream->open( pszFileName, bTruncateIfExists))) - { - goto Exit; - } - - *ppOStream = pNewOStream; - pNewOStream = NULL; - -Exit: - - if( pNewOStream) - { - pNewOStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return a multi-file output stream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openMultiFileOStream( - const char * pszDirectory, - const char * pszBaseName, - FLMUINT uiMaxFileSize, - FLMBOOL bOverwrite, - IF_OStream ** ppOStream) -{ - RCODE rc = NE_FLM_OK; - F_MultiFileOStream * pNewOStream = NULL; - - if( (pNewOStream = f_new F_MultiFileOStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewOStream->create( pszDirectory, pszBaseName, - uiMaxFileSize, bOverwrite))) - { - goto Exit; - } - - *ppOStream = pNewOStream; - pNewOStream = NULL; - -Exit: - - if( pNewOStream) - { - pNewOStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Return a buffered output stream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openBufferedOStream( - IF_OStream * pOStream, - FLMUINT uiBufferSize, - IF_OStream ** ppOStream) -{ - RCODE rc = NE_FLM_OK; - F_BufferedOStream * pNewOStream = NULL; - - if( (pNewOStream = f_new F_BufferedOStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewOStream->open( pOStream, uiBufferSize))) - { - goto Exit; - } - - *ppOStream = pNewOStream; - pNewOStream = NULL; - -Exit: - - if( pNewOStream) - { - pNewOStream->Release(); - } - - return( rc); -} -#endif - -/****************************************************************************** -Desc: Read all data from input stream and write to the output stream. -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::writeToOStream( - IF_IStream * pIStream, - IF_OStream * pOStream) -{ - RCODE rc = NE_FLM_OK; - FLMBYTE ucBuffer[ 512]; - FLMUINT uiBufferSize = sizeof( ucBuffer); - FLMUINT uiBytesToWrite; - FLMUINT uiBytesRead; - - for (;;) - { - if( RC_BAD( rc = pIStream->read( - ucBuffer, uiBufferSize, &uiBytesRead))) - { - if( rc != NE_FLM_EOF_HIT) - { - goto Exit; - } - - rc = NE_FLM_OK; - - if (!uiBytesRead) - { - goto Exit; - } - } - - uiBytesToWrite = uiBytesRead; - if( RC_BAD( rc = pOStream->write( ucBuffer, uiBytesToWrite))) - { - goto Exit; - } - } - -Exit: - - return( rc); -} -#endif - -/**************************************************************************** -Desc: -*****************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openFileIStream( - const char * pszPath, - IF_PosIStream ** ppIStream) -{ - RCODE rc = NE_FLM_OK; - F_FileIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_FileIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pszPath))) - { - goto Exit; - } - - if( *ppIStream) - { - (*ppIStream)->Release(); - } - - *ppIStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/***************************************************************************** -Desc: -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openBase64Encoder( - IF_IStream * pInputStream, - FLMBOOL bInsertLineBreaks, - IF_IStream ** ppEncodedStream) -{ - RCODE rc = NE_FLM_OK; - F_Base64EncoderIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_Base64EncoderIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pInputStream, bInsertLineBreaks))) - { - goto Exit; - } - - if( *ppEncodedStream) - { - (*ppEncodedStream)->Release(); - } - - *ppEncodedStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - -/***************************************************************************** -Desc: -******************************************************************************/ -#if 0 -RCODE FLMAPI F_DbSystem::openBase64Decoder( - IF_IStream * pInputStream, - IF_IStream ** ppDecodedStream) -{ - RCODE rc = NE_FLM_OK; - F_Base64DecoderIStream * pNewIStream = NULL; - - if( (pNewIStream = f_new F_Base64DecoderIStream) == NULL) - { - rc = RC_SET( NE_FLM_MEM); - goto Exit; - } - - if( RC_BAD( rc = pNewIStream->open( pInputStream))) - { - goto Exit; - } - - if( *ppDecodedStream) - { - (*ppDecodedStream)->Release(); - } - - *ppDecodedStream = pNewIStream; - pNewIStream = NULL; - -Exit: - - if( pNewIStream) - { - pNewIStream->Release(); - } - - return( rc); -} -#endif - /******************************************************************** Desc: *********************************************************************/ diff --git a/ftk/src/ftksys.h b/ftk/src/ftksys.h index 8ef2f96..74a8661 100644 --- a/ftk/src/ftksys.h +++ b/ftk/src/ftksys.h @@ -369,6 +369,17 @@ return( strcpy( pszDest, pszSrc)); } + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strncpy( + char * pszDest, + const char * pszSrc, + FLMSIZET uiLength) + { + return( strncpy( pszDest, pszSrc, uiLength)); + } + /**************************************************************************** Desc: ****************************************************************************/ @@ -382,10 +393,10 @@ Desc: ****************************************************************************/ FINLINE FLMINT FLMAPI f_strcmp( - const char * pvStr1, - const char * pvStr2) + const char * pszStr1, + const char * pszStr2) { - return( strcmp( pvStr1, pvStr2)); + return( strcmp( pszStr1, pszStr2)); } /**************************************************************************** @@ -393,10 +404,10 @@ ****************************************************************************/ #ifdef FLM_WIN FINLINE FLMINT FLMAPI f_stricmp( - const char * pvStr1, - const char * pvStr2) + const char * pszStr1, + const char * pszStr2) { - return( _stricmp( pvStr1, pvStr2)); + return( _stricmp( pszStr1, pszStr2)); } #endif @@ -404,11 +415,11 @@ Desc: ****************************************************************************/ FINLINE FLMINT FLMAPI f_strncmp( - const char * pvStr1, - const char * pvStr2, + const char * pszStr1, + const char * pszStr2, FLMSIZET uiLength) { - return( strncmp( pvStr1, pvStr2, uiLength)); + return( strncmp( pszStr1, pszStr2, uiLength)); } /**************************************************************************** @@ -416,36 +427,75 @@ ****************************************************************************/ #ifdef FLM_WIN FINLINE FLMINT FLMAPI f_strnicmp( - const char * pvStr1, - const char * pvStr2, + const char * pszStr1, + const char * pszStr2, FLMSIZET uiLength) { - return( _strnicmp( pvStr1, pvStr2, uiLength));#else + return( _strnicmp( pszStr1, pszStr2, uiLength)); } #endif + + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strcat( + char * pszDest, + const char * pszSrc) + { + return( strcat( pszDest, pszSrc)); + } + + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strncat( + char * pszDest, + const char * pszSrc, + FLMSIZET uiLength) + { + return( strncat( pszDest, pszSrc, uiLength)); + } -#if 0 - #define f_strcat( dest, src) \ - strcat( (char*)(dest), (char*)(src)) - - #define f_strchr( str, value) \ - strchr( (char*)str, (int)value) - - #define f_strncpy( dest, src, length) \ - strncpy( (char*)(dest), (char*)(src), (size_t)(length)) - - #define f_strrchr( str, value ) \ - strrchr( (char*)(str), (int)value) - - #define f_strstr( str1, str2) \ - (char *)strstr( (char*)(str1), (char*)(str2)) - - #define f_strncat( str1, str2, n) \ - strncat( (char *)(str1), (char *)(str2), n) - - #define f_strupr( str) \ - _strupr( (char *)(str)) -#endif + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strchr( + char * pszStr, + unsigned char ucByte) + { + return( strchr( pszStr, ucByte)); + } + + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strrchr( + char * pszStr, + unsigned char ucByte) + { + return( strrchr( pszStr, ucByte)); + } + + /**************************************************************************** + Desc: + ****************************************************************************/ + FINLINE char * FLMAPI f_strstr( + const char * pszStr1, + const char * pszStr2) + { + return( strstr( pszStr1, pszStr2)); + } + + /**************************************************************************** + Desc: + ****************************************************************************/ + #ifdef FLM_WIN + FINLINE char * FLMAPI f_strupr( + char * pszStr) + { + return( _strupr( pszStr)); + } + #endif #if defined( __va_copy) #define f_va_copy(to, from) __va_copy(to, from) @@ -2050,6 +2100,506 @@ friend class F_FileSystem; }; + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_IStream : public IF_IStream, public F_Base + { + public: + + F_IStream(); + + virtual ~F_IStream(); + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_OStream : public IF_OStream, public F_Base + { + public: + + F_OStream(); + + virtual ~F_OStream(); + + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_PosIStream : public IF_PosIStream, public F_Base + { + public: + + F_PosIStream(); + + virtual ~F_PosIStream(); + + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_BufferIStream : public IF_BufferIStream, public F_Base + { + public: + + F_BufferIStream() + { + m_pucBuffer = NULL; + m_uiBufferLen = 0; + m_uiOffset = 0; + m_bAllocatedBuffer = FALSE; + m_bIsOpen = FALSE; + } + + virtual ~F_BufferIStream(); + + RCODE FLMAPI open( + const FLMBYTE * pucBuffer, + FLMUINT uiLength, + FLMBYTE ** ppucAllocatedBuffer = NULL); + + FINLINE FLMUINT64 FLMAPI totalSize( void) + { + flmAssert( m_bIsOpen); + return( m_uiBufferLen); + } + + FINLINE FLMUINT64 FLMAPI remainingSize( void) + { + flmAssert( m_bIsOpen); + return( m_uiBufferLen - m_uiOffset); + } + + RCODE FLMAPI close( void); + + FINLINE RCODE FLMAPI positionTo( + FLMUINT64 ui64Position) + { + flmAssert( m_bIsOpen); + + if( ui64Position < m_uiBufferLen) + { + m_uiOffset = (FLMUINT)ui64Position; + } + else + { + m_uiOffset = m_uiBufferLen; + } + + return( NE_FLM_OK); + } + + FINLINE FLMUINT64 FLMAPI getCurrPosition( void) + { + flmAssert( m_bIsOpen); + return( m_uiOffset); + } + + RCODE FLMAPI read( + void * pvBuffer, + FLMUINT uiBytesToRead, + FLMUINT * puiBytesRead); + + FINLINE const FLMBYTE * getBuffer( void) + { + flmAssert( m_bIsOpen); + return( m_pucBuffer); + } + + FINLINE const FLMBYTE * getBufferAtCurrentOffset( void) + { + flmAssert( m_bIsOpen); + return( m_pucBuffer ? &m_pucBuffer[ m_uiOffset] : NULL); + } + + FINLINE void truncate( + FLMUINT uiOffset) + { + flmAssert( m_bIsOpen); + flmAssert( uiOffset >= m_uiOffset); + flmAssert( uiOffset <= m_uiBufferLen); + + m_uiBufferLen = uiOffset; + } + + FINLINE FLMBOOL isOpen( void) + { + return( m_bIsOpen); + } + + private: + + const FLMBYTE * m_pucBuffer; + FLMUINT m_uiBufferLen; + FLMUINT m_uiOffset; + FLMBOOL m_bAllocatedBuffer; + FLMBOOL m_bIsOpen; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_FileIStream : public F_PosIStream + { + public: + + F_FileIStream() + { + m_pFileHdl = NULL; + m_ui64FileOffset = 0; + } + + virtual ~F_FileIStream() + { + if( m_pFileHdl) + { + m_pFileHdl->Release(); + } + } + + RCODE FLMAPI open( + const char * pszPath); + + RCODE FLMAPI close( void); + + RCODE FLMAPI positionTo( + FLMUINT64 ui64Position); + + FLMUINT64 FLMAPI totalSize( void); + + FLMUINT64 FLMAPI remainingSize( void); + + FLMUINT64 FLMAPI getCurrPosition( void); + + RCODE FLMAPI read( + void * pvBuffer, + FLMUINT uiBytesToRead, + FLMUINT * puiBytesRead); + + private: + + IF_FileHdl * m_pFileHdl; + FLMUINT64 m_ui64FileOffset; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_BufferedIStream : public F_PosIStream + { + public: + + F_BufferedIStream() + { + m_pIStream = NULL; + m_pucBuffer = NULL; + } + + virtual ~F_BufferedIStream() + { + close(); + } + + RCODE FLMAPI open( + IF_IStream * pIStream, + FLMUINT uiBufferSize); + + RCODE FLMAPI read( + void * pvBuffer, + FLMUINT uiBytesToRead, + FLMUINT * puiBytesRead); + + RCODE FLMAPI close( void); + + FINLINE FLMUINT64 FLMAPI totalSize( void) + { + if (!m_pIStream) + { + flmAssert( 0); + return( 0); + } + + return( m_uiBytesAvail); + } + + FINLINE FLMUINT64 FLMAPI remainingSize( void) + { + if( !m_pIStream) + { + flmAssert( 0); + return( 0); + } + + return( m_uiBytesAvail - m_uiBufferOffset); + } + + FINLINE RCODE FLMAPI positionTo( + FLMUINT64 ui64Position) + { + if( !m_pIStream) + { + flmAssert( 0); + return( RC_SET( NE_FLM_ILLEGAL_OP)); + } + + if( ui64Position < m_uiBytesAvail) + { + m_uiBufferOffset = (FLMUINT)ui64Position; + } + else + { + m_uiBufferOffset = m_uiBytesAvail; + } + + return( NE_FLM_OK); + } + + FINLINE FLMUINT64 FLMAPI getCurrPosition( void) + { + if( !m_pIStream) + { + flmAssert( 0); + return( 0); + } + + return( m_uiBufferOffset); + } + + private: + + IF_IStream * m_pIStream; + FLMBYTE * m_pucBuffer; + FLMUINT m_uiBufferSize; + FLMUINT m_uiBufferOffset; + FLMUINT m_uiBytesAvail; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_BufferedOStream : public F_OStream + { + public: + + F_BufferedOStream() + { + m_pOStream = NULL; + m_pucBuffer = NULL; + } + + virtual ~F_BufferedOStream() + { + close(); + } + + RCODE FLMAPI open( + IF_OStream * pOStream, + FLMUINT uiBufferSize); + + RCODE FLMAPI write( + const void * pvBuffer, + FLMUINT uiBytesToWrite, + FLMUINT * puiBytesWritten); + + RCODE FLMAPI close( void); + + RCODE FLMAPI flush( void); + + private: + + IF_OStream * m_pOStream; + FLMBYTE * m_pucBuffer; + FLMUINT m_uiBufferSize; + FLMUINT m_uiBufferOffset; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_FileOStream : public F_OStream + { + public: + + F_FileOStream() + { + m_pFileHdl = NULL; + } + + virtual ~F_FileOStream() + { + close(); + } + + RCODE FLMAPI open( + const char * pszFilePath, + FLMBOOL bTruncateIfExists); + + RCODE FLMAPI write( + const void * pvBuffer, + FLMUINT uiBytesToWrite, + FLMUINT * puiBytesWritten); + + RCODE FLMAPI close( void); + + private: + + IF_FileHdl * m_pFileHdl; + FLMUINT64 m_ui64FileOffset; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_MultiFileIStream : public F_IStream + { + public: + + F_MultiFileIStream() + { + m_pIStream = NULL; + m_bOpen = FALSE; + } + + virtual ~F_MultiFileIStream() + { + close(); + } + + RCODE FLMAPI open( + const char * pszDirectory, + const char * pszBaseName); + + RCODE FLMAPI read( + void * pvBuffer, + FLMUINT uiBytesToRead, + FLMUINT * puiBytesRead); + + RCODE FLMAPI close( void); + + private: + + RCODE rollToNextFile( void); + + IF_IStream * m_pIStream; + FLMBOOL m_bOpen; + FLMBOOL m_bEndOfStream; + FLMUINT m_uiFileNum; + FLMUINT64 m_ui64FileOffset; + char m_szDirectory[ F_PATH_MAX_SIZE + 1]; + char m_szBaseName[ F_PATH_MAX_SIZE + 1]; + }; + + /**************************************************************************** + Desc: + ****************************************************************************/ + class F_MultiFileOStream : public F_OStream + { + public: + + F_MultiFileOStream() + { + m_pOStream = NULL; + m_bOpen = FALSE; + } + + virtual ~F_MultiFileOStream() + { + close(); + } + + RCODE create( + const char * pszDirectory, + const char * pszBaseName, + FLMUINT uiMaxFileSize, + FLMBOOL bOkToOverwrite); + + RCODE FLMAPI write( + const void * pvBuffer, + FLMUINT uiBytesToWrite, + FLMUINT * puiBytesWritten); + + RCODE FLMAPI close( void); + + private: + + RCODE rollToNextFile( void); + + RCODE processDirectory( + const char * pszDirectory, + const char * pszBaseName, + FLMBOOL bOkToDelete); + + F_OStream * m_pOStream; + FLMBOOL m_bOpen; + FLMUINT m_uiFileNum; + FLMUINT64 m_ui64MaxFileSize; + FLMUINT64 m_ui64FileOffset; + char m_szDirectory[ F_PATH_MAX_SIZE + 1]; + char m_szBaseName[ F_PATH_MAX_SIZE + 1]; + + friend class F_FileSystem; + }; + + /**************************************************************************** + Desc: Decodes an ASCII base64 stream to binary + ****************************************************************************/ + class F_Base64DecoderIStream : public F_IStream + { + public: + + F_Base64DecoderIStream() + { + m_pIStream = NULL; + m_uiBufOffset = 0; + m_uiAvailBytes = 0; + } + + virtual ~F_Base64DecoderIStream() + { + close(); + } + + RCODE FLMAPI open( + IF_IStream * pIStream); + + RCODE FLMAPI read( + void * pvBuffer, + FLMUINT uiBytesToRead, + FLMUINT * puiBytesRead); + + FINLINE RCODE FLMAPI close( void) + { + RCODE rc = NE_FLM_OK; + + if( m_pIStream) + { + if( m_pIStream->getRefCount() == 1) + { + rc = m_pIStream->close(); + } + + m_pIStream->Release(); + m_pIStream = NULL; + } + + m_uiAvailBytes = 0; + m_uiBufOffset = 0; + + return( rc); + } + + private: + + IF_IStream * m_pIStream; + FLMUINT m_uiBufOffset; + FLMUINT m_uiAvailBytes; + FLMBYTE m_ucBuffer[ 8]; + static FLMBYTE m_ucDecodeTable[ 256]; + }; + /**************************************************************************** Desc: Logging ****************************************************************************/ @@ -2155,18 +2705,18 @@ /**************************************************************************** Desc: Misc. ****************************************************************************/ - FLMUINT flmGetFSBlockSize( + FLMUINT f_getFSBlockSize( FLMBYTE * pszFileName); #if defined( FLM_LINUX) - void flmGetLinuxKernelVersion( + void f_getLinuxKernelVersion( FLMUINT * puiMajor, FLMUINT * puiMinor, FLMUINT * puiRevision); - FLMUINT flmGetLinuxMaxFileSize( void); + FLMUINT f_getLinuxMaxFileSize( void); - void flmGetLinuxMemInfo( + void f_getLinuxMemInfo( FLMUINT64 * pui64TotalMem, FLMUINT64 * pui64AvailMem); #endif diff --git a/ftk/src/ftkunix.cpp b/ftk/src/ftkunix.cpp index 3378c5a..1206477 100644 --- a/ftk/src/ftkunix.cpp +++ b/ftk/src/ftkunix.cpp @@ -78,7 +78,7 @@ F_FileHdl::F_FileHdl() m_fd = -1; m_bDoDirectIO = FALSE; m_uiExtendSize = 0; -// m_uiMaxAutoExtendSize = gv_XFlmSysData.uiMaxFileSize; + m_uiMaxAutoExtendSize = gv_uiMaxFileSize; m_uiBytesPerSector = 0; m_ui64NotOnSectorBoundMask = 0; m_ui64GetSectorBoundMask = 0; @@ -1308,7 +1308,7 @@ Exit: Desc: Determines the kernel version of the linux system we are running on ***************************************************************************/ #ifdef FLM_LINUX -void flmGetLinuxKernelVersion( +void f_getLinuxKernelVersion( FLMUINT * puiMajor, FLMUINT * puiMinor, FLMUINT * puiRevision) @@ -1393,23 +1393,22 @@ Exit: Desc: Determines if the linux system we are running on is 2.4 or greater. ***************************************************************************/ #ifdef FLM_LINUX -FLMUINT flmGetLinuxMaxFileSize( void) +FLMUINT f_getLinuxMaxFileSize( void) { #ifdef FLM_32BIT return( FLM_MAXIMUM_FILE_SIZE); #else FLMUINT uiMaxFileSize = 0x7FF00000; -// flmAssert( gv_XFlmSysData.uiLinuxMajorVer); + flmAssert( gv_uiLinuxMajorVer); // Is version 2.4 or greater? -// if( gv_XFlmSysData.uiLinuxMajorVer > 2 || -// (gv_XFlmSysData.uiLinuxMajorVer == 2 && -// gv_XFlmSysData.uiLinuxMinorVer >= 4)) -// { -// uiMaxFileSize = FLM_MAXIMUM_FILE_SIZE; -// } + if( gv_uiLinuxMajorVer > 2 || + (gv_uiLinuxMajorVer == 2 && gv_uiLinuxMinorVer >= 4)) + { + uiMaxFileSize = FLM_MAXIMUM_FILE_SIZE; + } return( uiMaxFileSize); #endif @@ -1420,7 +1419,7 @@ FLMUINT flmGetLinuxMaxFileSize( void) Desc: ***************************************************************************/ #ifdef FLM_LINUX -FINLINE FLMUINT64 flmGetLinuxMemInfoValue( +FINLINE FLMUINT64 f_getLinuxMemInfoValue( char * pszMemInfoBuffer, char * pszTag) { @@ -1454,7 +1453,7 @@ FINLINE FLMUINT64 flmGetLinuxMemInfoValue( Desc: ***************************************************************************/ #ifdef FLM_LINUX -void flmGetLinuxMemInfo( +void f_getLinuxMemInfo( FLMUINT64 * pui64TotalMem, FLMUINT64 * pui64AvailMem) { @@ -1483,12 +1482,12 @@ void flmGetLinuxMemInfo( pszMemInfoBuf[ iBytesRead] = 0; if( (ui64TotalMem = - flmGetLinuxMemInfoValue( pszMemInfoBuf, "MemTotal:")) != 0) + f_getLinuxMemInfoValue( pszMemInfoBuf, "MemTotal:")) != 0) { ui64AvailMem = - flmGetLinuxMemInfoValue( pszMemInfoBuf, "MemFree:") + - flmGetLinuxMemInfoValue( pszMemInfoBuf, "Buffers:") + - flmGetLinuxMemInfoValue( pszMemInfoBuf, "Cached:"); + f_getLinuxMemInfoValue( pszMemInfoBuf, "MemFree:") + + f_getLinuxMemInfoValue( pszMemInfoBuf, "Buffers:") + + f_getLinuxMemInfoValue( pszMemInfoBuf, "Cached:"); } Exit: @@ -1518,7 +1517,7 @@ Exit: /**************************************************************************** Desc: This routine gets the block size for the file system a file belongs to. ****************************************************************************/ -FLMUINT flmGetFSBlockSize( +FLMUINT f_getFSBlockSize( FLMBYTE * pszFileName) { FLMUINT uiFSBlkSize = 4096; diff --git a/ftk/src/ftkwin.cpp b/ftk/src/ftkwin.cpp index 6ff54bc..26f2939 100644 --- a/ftk/src/ftkwin.cpp +++ b/ftk/src/ftkwin.cpp @@ -27,9 +27,6 @@ #if defined( FLM_WIN) -FSTATIC RCODE _DeleteFile( - char * path); - /**************************************************************************** Desc: ****************************************************************************/ @@ -395,7 +392,7 @@ RCODE F_FileHdl::createUnique( rc = create( szTmpPath, uiIoFlags | FLM_IO_EXCL); if (rc == NE_FLM_IO_DISK_FULL) { - (void)_DeleteFile( szTmpPath); + DeleteFile( (LPTSTR)szTmpPath); goto Exit; } if ((rc == NE_FLM_IO_PATH_NOT_FOUND) || (rc == NE_FLM_IO_INVALID_PASSWORD)) @@ -499,7 +496,7 @@ RCODE FLMAPI F_FileHdl::close( void) goto Exit; } - if (!CloseHandle( m_FileHandle)) + if( !CloseHandle( m_FileHandle)) { rc = MapPlatformError( GetLastError(), NE_FLM_CLOSING_FILE); goto Exit; @@ -508,13 +505,13 @@ RCODE FLMAPI F_FileHdl::close( void) m_FileHandle = INVALID_HANDLE_VALUE; m_bFileOpened = m_bOpenedReadOnly = m_bOpenedExclusive = FALSE; - if (m_bDeleteOnRelease) + if( m_bDeleteOnRelease) { flmAssert( NULL != m_pszFileName ); if( bDeleteAllowed) { - (void)_DeleteFile( m_pszFileName); + DeleteFile( (LPTSTR)m_pszFileName); } m_bDeleteOnRelease = FALSE; @@ -1575,19 +1572,11 @@ Exit: } /**************************************************************************** -Desc: Deletes a file +Desc: ****************************************************************************/ -FSTATIC RCODE _DeleteFile( - char * pszPath) +void FLMAPI f_yieldCPU( void) { - RCODE rc = NE_FLM_OK; - - if( DeleteFile( (LPTSTR)pszPath) == FALSE) - { - rc = MapPlatformError( GetLastError(), NE_FLM_IO_DELETING_FILE); - } - - return rc; + Sleep( 0); } #endif // FLM_WIN