int configuration_reader_get_bool()

in src/configuration_reader.c [362:430]


int configuration_reader_get_bool(IFabricCodePackageActivationContext* activation_context, const wchar_t* config_package_name, const wchar_t* section_name, const wchar_t* parameter_name, bool* value)
{
    int result;

    if (
        /*Codes_SRS_CONFIGURATION_READER_03_001: [ If activation_context is NULL then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
        activation_context == NULL ||
        /*Codes_SRS_CONFIGURATION_READER_03_002: [ If config_package_name is NULL or empty then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
        (config_package_name == NULL || config_package_name[0] == L'\0') ||
        /*Codes_SRS_CONFIGURATION_READER_03_003: [ If section_name is NULL or empty then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
        (section_name == NULL || section_name[0] == L'\0') ||
        /*Codes_SRS_CONFIGURATION_READER_03_004: [ If parameter_name is NULL or empty then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
        (parameter_name == NULL || parameter_name[0] == L'\0') ||
        /*Codes_SRS_CONFIGURATION_READER_03_005: [ If value is NULL then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
        (value == NULL)
        )
    {
        LogError("Invalid args: IFabricCodePackageActivationContext* activation_context = %p, const wchar_t* config_package_name = %ls, const wchar_t* section_name = %ls, const wchar_t* parameter_name = %ls, uint32_t* value = %p",
            activation_context, MU_WP_OR_NULL(config_package_name), MU_WP_OR_NULL(section_name), MU_WP_OR_NULL(parameter_name), value);
        result = MU_FAILURE;
    }
    else
    {
        IFabricConfigurationPackage* fabric_configuration_package;
        const wchar_t* wchar_value;
        /*Codes_SRS_CONFIGURATION_READER_03_006: [ configuration_reader_get_bool shall call the GetConfigurationPackage function on activation_context with config_package_name. ]*/
        /*Codes_SRS_CONFIGURATION_READER_03_007: [ configuration_reader_get_bool shall call GetValue on the configuration package with section_name and parameter_name. ]*/
        if (get_string_value_from_package(activation_context, config_package_name, section_name, parameter_name, &fabric_configuration_package, &wchar_value) != 0)
        {
            // already logged error
            /*Codes_SRS_CONFIGURATION_READER_03_011: [ If there are any other failures then configuration_reader_get_bool shall fail and return a non-zero value. ]*/
            result = MU_FAILURE;
        }
        else
        {
            // Codes_SRS_CONFIGURATION_READER_11_001: [ configuration_reader_get_bool shall do a case insensitive comparison of the string. ]
            /*Codes_SRS_CONFIGURATION_READER_03_009: [ If the string is False, configuration_reader_get_bool shall set value to false and return 0. ]*/
            /*Codes_SRS_CONFIGURATION_READER_03_012: [ configuration_reader_get_bool shall succeed and return 0. ]*/
            if (_wcsicmp(wchar_value, FALSEString) == 0)
            {
                *value = false;
                result = 0;
            }
            /*Codes_SRS_CONFIGURATION_READER_03_010: [ If the string is True, configuration_reader_get_bool shall set value to true and return 0. ]*/
            /*Codes_SRS_CONFIGURATION_READER_03_012: [ configuration_reader_get_bool shall succeed and return 0. ]*/
            else if (_wcsicmp(wchar_value, TRUEString) == 0)
            {
                *value = true;
                result = 0;
            }
            /*Codes_SRS_CONFIGURATION_READER_03_014: [ If the string is an empty string, configuration_reader_get_bool shall set value to false and return 0. ]*/
            else if (wcscmp(wchar_value, L"") == 0)
            {
                *value = false;
                result = 0;
            }
            else
            {
                /*Codes_SRS_CONFIGURATION_READER_03_013: [ If the string is anything other than the above, configuration_reader_get_bool shall fail and return a non-zero value. ]*/
                LogError("Invalid boolean value %ls for const wchar_t* config_package_name = %ls, const wchar_t* section_name = %ls, const wchar_t* parameter_name = %ls",
                    wchar_value, config_package_name, section_name, parameter_name);
                result = MU_FAILURE;
            }
            (void)fabric_configuration_package->lpVtbl->Release(fabric_configuration_package);
        }
    }

    return result;
}