in lib/nxp/utilities/fsl_str.c [1153:1304]
static uint8_t StrFormatScanfStringHandling(char **str, uint32_t *flag, uint32_t *field_width, uint8_t *base)
{
uint8_t exitPending = 0U;
char *c = *str;
/* Loop to get full conversion specification. */
while (('\0' != (*c)) && (0U == (*flag & (uint32_t)kSCANF_DestMask)))
{
#if SCANF_ADVANCED_ENABLE
if ('*' == (*c))
{
if (0U != ((*flag) & (uint32_t)kSCANF_Suppress))
{
/* Match failure. */
exitPending = 1U;
}
else
{
(*flag) |= (uint32_t)kSCANF_Suppress;
}
}
else if ('h' == (*c))
{
if (0U != ((*flag) & (uint32_t)kSCANF_LengthMask))
{
/* Match failure. */
exitPending = 1U;
}
else
{
if (c[1] == 'h')
{
(*flag) |= (uint32_t)kSCANF_LengthChar;
c++;
}
else
{
(*flag) |= (uint32_t)kSCANF_LengthShortInt;
}
}
}
else if ('l' == (*c))
{
if (0U != ((*flag) & (uint32_t)kSCANF_LengthMask))
{
/* Match failure. */
exitPending = 1U;
}
else
{
if (c[1] == 'l')
{
(*flag) |= (uint32_t)kSCANF_LengthLongLongInt;
c++;
}
else
{
(*flag) |= (uint32_t)kSCANF_LengthLongInt;
}
}
}
else
#endif /* SCANF_ADVANCED_ENABLE */
#if SCANF_FLOAT_ENABLE
if ('L' == (*c))
{
if (0U != ((*flag) & (uint32_t)kSCANF_LengthMask))
{
/* Match failure. */
exitPending = 1U;
}
else
{
(*flag) |= (uint32_t)kSCANF_LengthLongLongDouble;
}
}
else
#endif /* SCANF_FLOAT_ENABLE */
if (((*c) >= '0') && ((*c) <= '9'))
{
{
char *p;
(*field_width) = strtoul(c, &p, 10);
c = p - 1;
}
}
else if ('d' == (*c))
{
(*base) = 10U;
(*flag) |= (uint32_t)kSCANF_TypeSinged;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
else if ('u' == (*c))
{
(*base) = 10U;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
else if ('o' == (*c))
{
(*base) = 8U;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
else if (('x' == (*c)))
{
(*base) = 16U;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
else if ('X' == (*c))
{
(*base) = 16U;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
else if ('i' == (*c))
{
(*base) = 0U;
(*flag) |= (uint32_t)kSCANF_DestInt;
}
#if SCANF_FLOAT_ENABLE
else if (1 == StrFormatScanIsFloat(c))
{
(*flag) |= (uint32_t)kSCANF_DestFloat;
}
#endif /* SCANF_FLOAT_ENABLE */
else if ('c' == (*c))
{
(*flag) |= (uint32_t)kSCANF_DestChar;
if (MAX_FIELD_WIDTH == (*field_width))
{
(*field_width) = 1;
}
}
else if ('s' == (*c))
{
(*flag) |= (uint32_t)kSCANF_DestString;
}
else
{
exitPending = 1U;
}
if (1U == exitPending)
{
break;
}
else
{
c++;
}
}
*str = c;
return exitPending;
}