From 2c520933aef9635ecd6f248ad2d655dfc5b1ab74 Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Tue, 30 May 2006 22:28:09 +0000 Subject: [PATCH] Fixed NetWare build. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@485 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- ftk/src/ftk.h | 231 ++++++++++++++++++++++++--------------------- ftk/src/ftkmem.cpp | 52 +++++----- 2 files changed, 147 insertions(+), 136 deletions(-) diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index 4b8c8d9..82b1b0a 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -346,7 +346,7 @@ #endif #elif defined( FLM_NLM) #define FLMAPI __stdcall - #define FLMEXP FLMEXTC + #define FLMEXP #define FINLINE inline #elif defined( FLM_UNIX) #define FLMAPI @@ -3958,8 +3958,8 @@ public: F_DynaBuf( - FLMBYTE * pucBuffer, - FLMUINT uiBufferSize) + FLMBYTE * pucBuffer = NULL, + FLMUINT uiBufferSize = 0) { m_pucBuffer = pucBuffer; m_uiBufferSize = uiBufferSize; @@ -4006,32 +4006,6 @@ return( rc); } - FINLINE RCODE FLMAPI appendData( - const void * pvData, - FLMUINT uiSize) - { - RCODE rc = NE_FLM_OK; - void * pvTmp = NULL; - - if( RC_BAD( rc = allocSpace( uiSize, &pvTmp))) - { - goto Exit; - } - - if( uiSize == 1) - { - *((FLMBYTE *)pvTmp) = *((FLMBYTE *)pvData); - } - else - { - f_memcpy( pvTmp, pvData, uiSize); - } - - Exit: - - return( rc); - } - FINLINE RCODE FLMAPI appendByte( FLMBYTE ucChar) { @@ -4068,6 +4042,51 @@ return( rc); } + FINLINE RCODE FLMAPI appendData( + const void * pvData, + FLMUINT uiSize) + { + RCODE rc = NE_FLM_OK; + void * pvTmp = NULL; + + if( RC_BAD( rc = allocSpace( uiSize, &pvTmp))) + { + goto Exit; + } + + if( uiSize == 1) + { + *((FLMBYTE *)pvTmp) = *((FLMBYTE *)pvData); + } + else + { + f_memcpy( pvTmp, pvData, uiSize); + } + + Exit: + + return( rc); + } + + FINLINE RCODE FLMAPI appendString( + const char * pszString) + { + RCODE rc = NE_FLM_OK; + void * pvTmp = NULL; + FLMUINT uiSize = f_strlen( pszString); + + if( RC_BAD( rc = allocSpace( uiSize, &pvTmp))) + { + goto Exit; + } + + f_memcpy( pvTmp, pszString, uiSize); + + Exit: + + return( rc); + } + FINLINE FLMBYTE * FLMAPI getBufferPtr( void) { return( m_pucBuffer); @@ -4315,8 +4334,7 @@ ****************************************************************************/ typedef enum { - FLM_LOCK_NONE, ///< No lock.\ NOTE: This is not a valid option for FlmDbLock(), but it may be returned by - ///< FlmDbGetLockType(). + FLM_LOCK_NONE, ///< No lock. FLM_LOCK_EXCLUSIVE, ///< Exclusive lock. FLM_LOCK_SHARED ///< Shared lock. } eLockType; @@ -4342,6 +4360,68 @@ #define FLM_NO_TIMEOUT 0xFF + /************************************************************************** + /// Structure used in gathering statistics to hold an operation count and an elapsed time. + **************************************************************************/ + typedef struct + { + FLMUINT64 ui64Count; ///< Number of times operation was performed + FLMUINT64 ui64ElapMilli; ///< Total elapsed time (milliseconds) for the operations. + } F_COUNT_TIME_STAT; + + + /************************************************************************** + /// Structure for returning lock statistics. + **************************************************************************/ + typedef struct + { + F_COUNT_TIME_STAT NoLocks; ///< Statistics on times when nobody was holding a lock on the database. + F_COUNT_TIME_STAT WaitingForLock; ///< Statistics on times threads were waiting to obtain a database lock. + F_COUNT_TIME_STAT HeldLock; ///< Statistics on times when a thread was holding a lock on the database. + } F_LOCK_STATS; + + /**************************************************************************** + Desc: + ****************************************************************************/ + flminterface IF_LockObject : public F_Object + { + virtual RCODE FLMAPI lock( + F_SEM hWaitSem, + FLMBOOL bExclLock, + FLMUINT uiMaxWaitSecs, + FLMINT iPriority, + F_LOCK_STATS * pLockStats = NULL) = 0; + + virtual RCODE FLMAPI unlock( + F_LOCK_STATS * pLockStats = NULL) = 0; + + virtual FLMUINT FLMAPI getLockCount( void) = 0; + + virtual FLMUINT FLMAPI getWaiterCount( void) = 0; + + virtual RCODE FLMAPI getLockInfo( + FLMINT iPriority, + eLockType * peCurrLockType, + FLMUINT * puiThreadId, + FLMUINT * puiNumExclQueued, + FLMUINT * puiNumSharedQueued, + FLMUINT * puiPriorityCount) = 0; + + virtual RCODE FLMAPI getLockInfo( + IF_LockInfoClient * pLockInfo) = 0; + + virtual FLMBOOL FLMAPI haveHigherPriorityWaiter( + FLMINT iPriority) = 0; + + virtual void FLMAPI timeoutLockWaiter( + FLMUINT uiThreadId) = 0; + + virtual void FLMAPI timeoutAllWaiters( void) = 0; + }; + + RCODE FLMAPI FlmAllocLockObject( + IF_LockObject ** ppLockObject); + /**************************************************************************** Desc: Misc. ****************************************************************************/ @@ -5724,82 +5804,23 @@ FLMBOOL m_bEndOfStream; }; -/*************************************************************************** -Desc: Hash tables -***************************************************************************/ - -typedef struct -{ - void * pFirstInBucket; // Pointer to first item in the bucket. - // The type of structure being pointed to - // depends on the usage of the hash bucket. - FLMUINT uiHashValue; // Hash value for this bucket. -} FBUCKET; - -RCODE FLMAPI f_allocHashTable( - FLMUINT uiHashTblSize, - FBUCKET ** ppHashTblRV); + /*************************************************************************** + Desc: Hash tables + ***************************************************************************/ -FLMUINT FLMAPI f_strHashBucket( - char * pszStr, - FBUCKET * pHashTbl, - FLMUINT uiNumBuckets); + typedef struct + { + void * pFirstInBucket; + FLMUINT uiHashValue; + } FBUCKET; -/// Structure used in gathering statistics to hold an operation count and an elapsed time. -typedef struct -{ - FLMUINT64 ui64Count; ///< Number of times operation was performed - FLMUINT64 ui64ElapMilli; ///< Total elapsed time (milliseconds) for the operations. -} F_COUNT_TIME_STAT; - -/// Structure for returning lock statistics. -typedef struct -{ - F_COUNT_TIME_STAT NoLocks; ///< Statistics on times when nobody was holding a lock on the database. - F_COUNT_TIME_STAT WaitingForLock; ///< Statistics on times threads were waiting to obtain a database lock. - F_COUNT_TIME_STAT HeldLock; ///< Statistics on times when a thread was holding a lock on the database. -} F_LOCK_STATS; - -/**************************************************************************** -Desc: -****************************************************************************/ -flminterface IF_LockObject : public F_Object -{ - virtual RCODE FLMAPI lock( - F_SEM hWaitSem, - FLMBOOL bExclLock, - FLMUINT uiMaxWaitSecs, - FLMINT iPriority, - F_LOCK_STATS * pLockStats = NULL) = 0; - - virtual RCODE FLMAPI unlock( - F_LOCK_STATS * pLockStats = NULL) = 0; + RCODE FLMAPI f_allocHashTable( + FLMUINT uiHashTblSize, + FBUCKET ** ppHashTblRV); - virtual FLMUINT FLMAPI getLockCount( void) = 0; - - virtual FLMUINT FLMAPI getWaiterCount( void) = 0; - - virtual RCODE FLMAPI getLockInfo( - FLMINT iPriority, - eLockType * peCurrLockType, - FLMUINT * puiThreadId, - FLMUINT * puiNumExclQueued, - FLMUINT * puiNumSharedQueued, - FLMUINT * puiPriorityCount) = 0; - - virtual RCODE FLMAPI getLockInfo( - IF_LockInfoClient * pLockInfo) = 0; - - virtual FLMBOOL FLMAPI haveHigherPriorityWaiter( - FLMINT iPriority) = 0; - - virtual void FLMAPI timeoutLockWaiter( - FLMUINT uiThreadId) = 0; - - virtual void FLMAPI timeoutAllWaiters( void) = 0; -}; - -RCODE FLMAPI FlmAllocLockObject( - IF_LockObject ** ppLockObject); + FLMUINT FLMAPI f_strHashBucket( + char * pszStr, + FBUCKET * pHashTbl, + FLMUINT uiNumBuckets); #endif // FTK_H diff --git a/ftk/src/ftkmem.cpp b/ftk/src/ftkmem.cpp index 2645af7..0adb2d4 100644 --- a/ftk/src/ftkmem.cpp +++ b/ftk/src/ftkmem.cpp @@ -4808,15 +4808,6 @@ SYMDEB.386 in the NetWare source. We have three options: an internal string buffer, then print the buffer. ****************************************************************************/ -#ifdef FLM_NLM - extern "C" - { - void GetClosestSymbol( - BYTE * szBuffer, - LONG udAddress); - } -#endif - /**************************************************************************** Desc: ****************************************************************************/ @@ -4891,8 +4882,8 @@ RCODE F_ObjRefTracker::setup( f_strcat( pszTmpBuf, ".OTL"); #ifdef FLM_NLM - f_strcpy( m_pLogPath, "SYS:SYSTEM"); - f_pathAppend( m_pLogPath, pszTmpBuf); + f_strcpy( m_pLogPath, "SYS:\\SYSTEM\\"); + f_strcat( m_pLogPath, pszTmpBuf); #else f_strcpy( m_pLogPath, pszTmpBuf); #endif @@ -5205,7 +5196,7 @@ void F_ObjRefTracker::formatAddress( return; } -#if defined( FLM_NLM) +#if defined( FLM_RING_ZERO_NLM) if( uiSize == 0) { @@ -5213,7 +5204,6 @@ void F_ObjRefTracker::formatAddress( } GetClosestSymbol( (BYTE *)pucBuffer, (LONG)pAddress); - return; #elif defined( FLM_WIN) @@ -5243,27 +5233,27 @@ void F_ObjRefTracker::formatAddress( f_free( &pihs); #else -#ifdef HAVE_DLADDR - Dl_info dlip; - if (dladdr(pAddress, &dlip) != 0 && dlip.dli_sname) - { - const char *filename; - if (dlip.dli_saddr != pAddress) + #ifdef HAVE_DLADDR + Dl_info dlip; + if (dladdr(pAddress, &dlip) != 0 && dlip.dli_sname) { - filename = strrchr(dlip.dli_fname, '/'); - if (!filename) - filename = dlip.dli_fname; + const char *filename; + if (dlip.dli_saddr != pAddress) + { + filename = strrchr(dlip.dli_fname, '/'); + if (!filename) + filename = dlip.dli_fname; + else + filename++; // skip over slash + f_sprintf( pucBuffer, "0x%08x (%s)", (unsigned)((FLMUINT)pAddress), + filename); + } else - filename++; // skip over slash - f_sprintf( pucBuffer, "0x%08x (%s)", (unsigned)((FLMUINT)pAddress), - filename); + f_sprintf( pucBuffer, "%s", dlip.dli_sname); + return; } - else - f_sprintf( pucBuffer, "%s", dlip.dli_sname); - return; - } -#endif - f_sprintf( pucBuffer, "0x%08x", (unsigned)((FLMUINT)pAddress)); + #endif + f_sprintf( pucBuffer, "0x%08x", (unsigned)((FLMUINT)pAddress)); #endif }