int logger_init()

in v2/src/logger.c [29:88]


int logger_init(void)
{
    int result;
    uint32_t i;

    switch (logger_state)
    {
    default:
        (void)printf("Unexpected logger state: %" PRI_MU_ENUM "", MU_ENUM_VALUE(LOGGER_STATE, logger_state));
        result = MU_FAILURE;
        break;

    case LOGGER_STATE_INITIALIZED:
    {
        /* Codes_SRS_LOGGER_01_002: [ If logger is already initialized, logger_init shall increment the logger initialization counter, succeed and return 0. ] */
        logger_init_count++;
        result = 0;
        break;
    }
    case LOGGER_STATE_NOT_INITIALIZED:
    {
        /* Codes_SRS_LOGGER_01_019: [ If logger is not already initialized: ] */

        /* Codes_SRS_LOGGER_01_020: [ logger_init shall set the logger initialization counter to 1. ] */
        logger_init_count = 1;

        /* Codes_SRS_LOGGER_01_003: [ logger_init shall call the init function of every sink that is configured to be used. ] */
        for (i = 0; i < log_sink_count; i++)
        {
            if (log_sinks[i]->init() != 0)
            {
                (void)printf("init of sink at index %" PRIu32 " failed\r\n", i);
                break;
            }
        }

        if (i < log_sink_count)
        {
            /* Codes_SRS_LOGGER_01_004: [ If init fails, all sinks already initialized shall have their deinit function called and logger_init shall fail and return a non-zero value. ] */
            for (uint32_t j = 0; j < i; j++)
            {
                log_sinks[j]->deinit();
            }

            result = MU_FAILURE;
        }
        else
        {
            logger_state = LOGGER_STATE_INITIALIZED;

            /* Codes_SRS_LOGGER_01_005: [ Otherwise, logger_init shall succeed and return 0. ] */
            result = 0;
        }

        break;
    }
    }

    return result;
}