Прокоментируйте код
От: Tom Россия http://www.RSDN.ru
Дата: 30.11.05 14:47
Оценка: :)
Принимаются любые коментарии к след. коду. Просто что вы думаете взглянув на него

void CGIParamsBase::Parse(const char *cstr, int iLen)
{
    char *str = const_cast<char*>(cstr);
    char *pNameBegin = str, *pNameEnd, *pValueBegin, *pValueEnd;
    while (pNameBegin - str < iLen)
    {
        if (*pNameBegin == '&')
            pNameBegin++;
        pNameEnd = pNameBegin;
        while (pNameEnd - str < iLen && *pNameEnd != '=' && *pNameEnd != '&')
            pNameEnd++;
        if (pNameEnd - str == iLen)
            break;
        if (*pNameEnd == '&')
        {
            pNameBegin = pNameEnd + 1;
            continue;
        }

        pValueEnd = pValueBegin = pNameEnd + 1;
        while (pValueEnd - str < iLen && *pValueEnd != '&')
            pValueEnd++;

        if (pNameEnd - pNameBegin > 2)
        {
            int iSrcLen = pValueEnd - pValueBegin;
            int iNewLen = 0;
            const char *pSrc = pValueBegin;
            char *pConverted = (char *)_alloca(iSrcLen);
            char *pDest = pConverted;
            for (; iSrcLen-- > 0; iNewLen++, pDest++, pSrc++)
            {
                if ((BYTE)*pSrc <= 0x1f || (BYTE)*pSrc >= 0x7f)
                    goto Cont;
                if (*pSrc == '+')
                    *pDest = ' ';
                else
                    if (*pSrc == '%')
                    {
                        *pDest = (char)(C2D(pSrc[1]) * 16 + C2D(pSrc[2]));
                        pSrc += 2;
                        iSrcLen -= 2;
                    }
                    else
                        *pDest = *pSrc;
            }
            ProcessParam(pNameBegin, pNameEnd - pNameBegin, pConverted, iNewLen);
        }
Cont:
        pNameBegin = pValueEnd;
    }
}
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.