Fixed NetWare build.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@485 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-05-30 22:28:09 +00:00
parent 0a24a706a2
commit 2c520933ae
2 changed files with 147 additions and 136 deletions

View File

@@ -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

View File

@@ -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
}