⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cli_lib.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 3 页
字号:
  Description.     :
  Calls            :
  Called By        :
  Table Accessed   : None
  Table Updated    : None
  Input            :
  Output           :
  Return           :
  Others           : None
 **************************************************************************/
_U32 _VerifyAndCvtDword (_S8 * szNum, _U32 dwLow, _U32 dwHigh, _U32 *
pdwValue)
{
    _U32 dwData;
    _S8 *pTemp, buf[32];

    if((szNum == G_NULL) || (pdwValue == G_NULL))
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    pTemp = _btrim(szNum);

    if (!strlen (pTemp) || _isdecstr (pTemp) != 0)
        return G_FAILURE;

    dwData = (_U32) atol (pTemp);
    EOS_Sprintf (buf, "%u", dwData);
    while (*pTemp == '0' && *(pTemp + 1) != 0)
        pTemp ++;
    if (strcmp (pTemp, buf))
        return G_FAILURE;

    if ((dwData < dwLow) || (dwData > dwHigh))
         return G_FAILURE;
    *pdwValue = dwData;

    return G_SUCCESS;
}

_U32 _VerifyAndCvtDwordH (_S8 * szNum, _U32 dwLow, _U32 dwHigh, _U32 *
pdwValue)
{
    _U32 dwData;
    _S8 *pTemp;

    if((szNum == G_NULL) || (pdwValue == G_NULL))
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    pTemp = _btrim(szNum);

    if (!strlen (pTemp) || _isxdecstr (pTemp) != 0)
        return G_FAILURE;

    //如果范围越界,直接返回失败
    if ((strlen(pTemp) > 10)
     || (*(pTemp+1) != 'x' && (strlen(pTemp) > 8)))
        return G_FAILURE;

    dwData = (_U32) _strtol (pTemp, 16);

    if ((dwData < dwLow) || (dwData > dwHigh))
         return G_FAILURE;
    *pdwValue = dwData;

    return G_SUCCESS;
}

/**************************************************************************
* PROTOTYPE : _S32 _isdecstr(_S8 * pStr)                                 *
* FUNCTION  : Check if a string is a valid decimal string?                *
* INPUTS    : pStr = Pointer to the string to be checked                  *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : YES; Other : NO                                         *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _isdecstr (_S8 * pStr)
{
    _S8 * p;

    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    for (p = pStr; *p; p++)
        if (!isdigit (*p)) return G_FAILURE;

    return G_SUCCESS;
}

_U32 _isxdecstr (_S8 * pStr)
{
    _S8 * p;

    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    if ( (*pStr == '0') && (tolower(*(pStr+1)) == 'x') )
        pStr += 2;

    for (p = pStr; *p; p++)
    {
        if (!isxdigit (*p))
            return G_FAILURE;
    }

    return G_SUCCESS;
}

/*********************************************************************/
/* 函数名称 : _DateOrTimeToUl()                                      */
/* 函数功能 : 将时间或日期转换成长整型. 该函数不作格式检查,如需检查, */
/*            调用者使用函数_VerifyDate自行检查                      */
/* 输入参数 : szDate  日期字符串                                     */
/* 输出参数 : pulDate 转换后的日期整型                               */
/* 返回     : 成功/失败                                              */
/* 上层函数 :                                                        */
/* 创建者   : Liuzequn                                               */
/* 修改记录 :                                                        */
/*********************************************************************/
_U32 _DateOrTimeToUl(_S8 *szDate, _U32 *pulDate)
{
    _S8 *pcDst, *pcSrc ;
    _U8  ucType;
    _S8 szSrc[20];
    _U32 ulTime[3];

    if (szDate == G_NULL || pulDate == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    strcpy(szSrc, szDate);

    pcSrc = szSrc;
    pcDst = szSrc;
    ucType = 0;
    for (; ;)
    {
        if (*pcSrc <= '9' && *pcSrc >= '0')
            pcSrc++;

        else if (*pcSrc == '-' || *pcSrc == ':'|| *pcSrc == '\0')
        {
            if (ucType > 2)
                return G_FAILURE;

            if (*pcSrc == '\0')
            {
                if ((_U32)_atoul(pcDst, &ulTime[ucType]) != G_SUCCESS)
                   return G_FAILURE;
                break;
            }
            *pcSrc = 0;
            if ((_U32)_atoul(pcDst, &ulTime[ucType]) != G_SUCCESS)
                return G_FAILURE;

            pcSrc++;
            pcDst = pcSrc;
            ucType++;
        }
        else
        {
            return G_FAILURE;
        }
    }
    *pulDate = (ulTime[0] << 16) | (ulTime[1] << 8) | (ulTime[2]);
    return G_SUCCESS;
}

/*********************************************************************/
/* 函数名称 : _VerifyDate()                                          */
/* 函数功能 : 判断日期类型的合法性                                   */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     :                                                        */
/* 上层函数 :                                                        */
/* 创建者   : Liuzequn                                               */
/* 修改记录 :                                                        */
/*********************************************************************/
_U32 _VerifyDate (_S8 *szDate1)
{
    _S8 *pcTmp, *pcDate ;
    _S8 szTmp[10] = "", szDate[20];
    _U8  ucType;
    _U32 ulNum[3];
    _U32 ulLimit[3][2] = {{G_YEAR_MIN, G_YEAR_MAX},
                          {1,    12},
                          {1,    31}};
    _U32 ulMaxDay[12] = {31, 29, 31, 30,
                         31, 30, 31, 31,
                         30, 31, 30, 31};

    if (szDate1 == G_NULL || strlen(szDate1) > 10 || szDate1[0] == 0)
        return G_FAILURE;

    strcpy(szDate, szDate1);

    pcTmp  = szTmp;
    pcDate = szDate;
    ucType = 0;
    for (;;)
    {
        if (*pcDate <= '9' && *pcDate >= '0')
            *pcTmp++ = *pcDate++;

        else if (*pcDate == '-' || *pcDate == '\0')
        {
            if (ucType > 2)
                return G_FAILURE;

            *pcTmp = 0;
            if ((_U32)_atoul(szTmp, &ulNum[ucType]) != G_SUCCESS)
                return G_FAILURE;

            if (ulNum[ucType] > ulLimit[ucType][1]|| ulNum[ucType] < ulLimit[ucType][0])
                return G_FAILURE;

            if (*pcDate == '\0')
                break;

            pcDate++;
            pcTmp = szTmp;
            *szTmp = '\0';
            ucType++;
        }
        else
        {
            return G_FAILURE;
        }
    }
    if (ucType < 2)
        return G_FAILURE;

    if (ulNum[0] % 4 != 0)
        ulMaxDay[1] = 28;

    if (ulNum[2] > ulMaxDay[ulNum[1] - 1])
        return G_FAILURE;

    return G_SUCCESS;
}

/*********************************************************************/
/* 函数名称 : _VerifyTime()                                          */
/* 函数功能 : 判断时间类型的合法性                                   */
/* 输入参数 :                                                        */
/* 输出参数 :                                                        */
/* 返回     :                                                        */
/* 上层函数 :                                                        */
/* 创建者   : Liuzequn                                               */
/* 修改记录 :                                                        */
/*********************************************************************/
_U32 _VerifyTime (_S8 *szTime1)
{
    _S8 *pcTmp, *pcTime ;
    _S8 szTmp[10] = "", szTime[20];
    _U8  ucType;
    _U32 ulNum;
    _U32 ulLimit[3] = {23, 59, 59};

    if (szTime1 == G_NULL || strlen(szTime1) > 8 || szTime1[0] == G_NULL)
        return G_FAILURE;

    strcpy(szTime, szTime1);

    pcTmp  = szTmp;
    pcTime = szTime;
    ucType = 0;
    for(; ;)
    {
        if (*pcTime <= '9' && *pcTime >= '0')
            *pcTmp++ = *pcTime++;

        else if (*pcTime == ':' || *pcTime == '\0')
        {
            if (ucType > 2 || szTmp[0] == '\0')
                return G_FAILURE;
            *pcTmp = 0;
            if ((_U32)_atoul(szTmp, &ulNum) != G_SUCCESS)
                return G_FAILURE;
            if (ulNum > ulLimit[ucType])
                return G_FAILURE;
            if (*pcTime == '\0')
                break;
            pcTime++;
            pcTmp = szTmp;
            *szTmp = '\0';
            ucType++;
        }
        else
        {
            return G_FAILURE;
        }
    }

    if (ucType < 2)
        return G_FAILURE;
    return G_SUCCESS;
}


_U32 _VerifyHostIPAddress(_S8 *szIPAdd)
{
    _S8 *pData;
    _U32 ulCount = 0, ulIpByte = 0;
    _S8 pTmp[4];

    pData = szIPAdd;
    pTmp[0] = pTmp[1] = pTmp[2] = pTmp[3] = '\0';
    if(pData == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    for(;;)
    {
        if(isdigit(*pData))
        {
            if(ulIpByte > 2)
                return G_FAILURE;
            pTmp[ulIpByte] = *pData;
        }
        else if((*pData == '.') || (*pData == '\0'))
        {
            ulCount ++;
            ulIpByte = (_U32)-1;
            if(ulCount > 4)
                return G_FAILURE;
            if((atoi(pTmp) > 255) || (pTmp[0] == '\0'))
                return G_FAILURE;
            if((pTmp[0] == '0') && (pTmp[1] == '\0')
               && (ulCount == 1))
                return G_FAILURE;
            pTmp[0] = pTmp[1] = pTmp[2] = pTmp[3] = '\0';
            if(*pData == '\0')
            {
                if(ulCount < 4)
                    return G_FAILURE;
                return G_SUCCESS;
            }
        }
        else return G_FAILURE;
        pData ++;
        ulIpByte ++;
    }
}

_U32 _VerifyGeneralIPAddress(_S8 *szIPAdd)
{
    _S8 *pData;
    _U32 ulCount = 0, ulIpByte = 0;
    _S8 pTmp[4];

    pData = szIPAdd;
    pTmp[0] = pTmp[1] = pTmp[2] = pTmp[3] = '\0';
    if(pData == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    for(;;)
    {
        if(isdigit(*pData))
        {
            if(ulIpByte > 2)
                return G_FAILURE;
            pTmp[ulIpByte] = *pData;
        }
        else if((*pData == '.') || (*pData == '\0'))
        {
            ulCount ++;
            ulIpByte = (_U32)-1;
            if(ulCount > 4)
                return G_FAILURE;
            if((atoi(pTmp) > 255) || (pTmp[0] == '\0'))
                return G_FAILURE;
            pTmp[0] = pTmp[1] = pTmp[2] = pTmp[3] = '\0';
            if(*pData == '\0')
            {
                if(ulCount < 4)
                    return G_FAILURE;
                return G_SUCCESS;
            }
        }
        else return G_FAILURE;
        pData ++;
        ulIpByte ++;
    }
}



_U32 _VerifyMASKAddress(_S8 *szMaskAdd)
{
    _S8 *pData;
    _U8 ucMask = 0xff;
    _U8 ucTmpMask;
    _U8 ucByte;
    _U32 ulCount = 0, ulIpByte = 0;
    _S8 pTmp[4];
    _U32 i, ulAllOne = 1;
    _U32 ulByte;

    pData = szMaskAdd;
    pTmp[0] = pTmp[1] = pTmp[2] = pTmp[3] = '\0';
    if(pData == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    for(;;)
    {
        if(isdigit(*pData))
        {
            if(ulIpByte > 2)
                return G_FAILURE;
            pTmp[ulIpByte] = *pData;
        }
        else if((*pData == '.') || (*pData == '\0'))
        {
            ulCount ++;
            ulIpByte = (_U32)-1;
            ulByte = (_U32)atoi(pTmp);
            if((ulCount > 4) || (pTmp[0] == '\0') || (ulByte > 255))
                return G_FAILURE;
            ucByte    = (_U8)ulByte;
            ucTmpMask = ucMask;
            for(i = 0; i < 8; i++)
            {
                if(ucByte == ucTmpMask)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -