in src/source/restful/kvs/restapi_kvs.c [324:381]
static int prvParseFragmentAckLength(char *pcSrc, size_t uLen, size_t *puMsgLen, size_t *puBytesRead)
{
int xRes = KVS_ERRNO_NONE;
size_t uMsgLen = 0;
size_t uBytesRead = 0;
size_t i = 0;
char c = 0;
if (pcSrc == NULL || uLen == 0 || puMsgLen == NULL || puBytesRead == NULL)
{
xRes = KVS_ERRNO_FAIL;
}
else
{
for (i = 0; i < uLen - 1; i++)
{
c = toupper(pcSrc[i]);
if (isxdigit(c))
{
if (c >= '0' && c <= '9')
{
uMsgLen = uMsgLen * 16 + (c - '0');
}
else
{
uMsgLen = uMsgLen * 16 + (c - 'A') + 10;
}
}
else if (c == '\r')
{
if (pcSrc[i + 1] == '\n')
{
uBytesRead = i + 2;
break;
}
}
else
{
xRes = KVS_ERRNO_FAIL;
}
}
}
if (xRes == KVS_ERRNO_NONE)
{
if (uBytesRead < 3 || (uBytesRead + uMsgLen + 2) > uLen || pcSrc[uBytesRead + uMsgLen] != '\r' || pcSrc[uBytesRead + uMsgLen + 1] != '\n')
{
xRes = KVS_ERRNO_FAIL;
}
else
{
*puMsgLen = uMsgLen;
*puBytesRead = uBytesRead;
}
}
return xRes;
}