Ported FLAIM to FTK.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@509 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-06-05 22:59:36 +00:00
parent 728ce20c8d
commit 7de8b6be39
188 changed files with 7093 additions and 73582 deletions

View File

@@ -37,6 +37,10 @@ FSTATIC RCODE tokenGet(
QTYPES * peType,
FLMUINT * puiTokenBufSize);
FSTATIC FLMBOOL tokenIsNum(
const char * pszToken,
FLMUINT * puiNum);
FSTATIC FLMBOOL tokenIsOperator(
const char * pszToken,
QTYPES * peOperator);
@@ -1462,3 +1466,102 @@ Exit:
return( rc);
}
/****************************************************************************
Desc: Determine if a token is a number.
****************************************************************************/
FSTATIC FLMBOOL tokenIsNum(
const char * pszToken,
FLMUINT * puiNum)
{
FLMBOOL bIsNum = TRUE;
FLMUINT uiNum;
FLMBOOL bAllowHex = FALSE;
if (*pszToken == 0)
{
bIsNum = FALSE;
goto Exit;
}
if (*pszToken == '0' &&
(*(pszToken + 1) == 'x' || *(pszToken + 1) == 'X'))
{
pszToken += 2;
bAllowHex = TRUE;
}
uiNum = 0;
while (*pszToken)
{
if (*pszToken >= '0' && *pszToken <= '9')
{
if (!bAllowHex)
{
if (uiNum > (FLMUINT)(-1) / 10)
{
// Number would overflow.
bIsNum = FALSE;
goto Exit;
}
else
{
uiNum *= 10;
}
}
else
{
if (uiNum > (FLMUINT)(-1) >> 4)
{
// Number would overflow.
bIsNum = FALSE;
goto Exit;
}
uiNum <<= 4;
}
uiNum += (FLMUINT)(*pszToken - '0');
}
else if (bAllowHex)
{
if (uiNum > (FLMUINT)(-1) >> 4)
{
// Number would overflow.
bIsNum = FALSE;
goto Exit;
}
if (*pszToken >= 'A' && *pszToken <= 'F')
{
uiNum <<= 4;
uiNum += (FLMUINT)(*pszToken - 'A') + 10;
}
else if (*pszToken >= 'a' && *pszToken <= 'f')
{
uiNum <<= 4;
uiNum += (FLMUINT)(*pszToken - 'a') + 10;
}
else
{
bIsNum = FALSE;
goto Exit;
}
}
else
{
bIsNum = FALSE;
goto Exit;
}
pszToken++;
}
*puiNum = uiNum;
Exit:
return( bIsNum);
}