static uint8_t StrFormatScanfStringHandling()

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;
}