int FABRIC_CONFIGURATION_SECTION_to_ARGC_ARGV()

in src/fc_section_argc_argv.c [18:93]


int FABRIC_CONFIGURATION_SECTION_to_ARGC_ARGV(const FABRIC_CONFIGURATION_SECTION* fabric_configuration_section, int* argc, char*** argv)
{
    int result;
    if (
        (fabric_configuration_section == NULL) ||
        (argc == NULL) ||
        (argv == NULL)
        )
    {
        LogError("invalid argument const FABRIC_CONFIGURATION_SECTION* fabric_configuration_section=%p, int* argc=%p, char*** argv=%p",
            fabric_configuration_section, argc, argv);
        result = MU_FAILURE;
    }
    else
    {
        *argv = malloc_2(2, sizeof(char*)); /*2 because --sectionName + "name", will realloc'd for every parameter*/
        if (*argv == NULL)
        {
            LogError("failure in 2 + fabric_configuration_section->Parameters->Count");
            result = MU_FAILURE;
        }
        else
        {
            *argc = 2;
            (*argv)[0] = sprintf_char(SECTION_NAME_DEFINE);
            if ((*argv)[0] == NULL)
            {
                LogError("failure in sprintf_char(SECTION_NAME_DEFINE=%s)", SECTION_NAME_DEFINE);
                result = MU_FAILURE;
            }
            else
            {
                (*argv)[1] = sprintf_char("%ls", fabric_configuration_section->Name);
                if ((*argv)[1] == NULL)
                {
                    LogError("failure in sprintf_char(\"%%ls\", fabric_configuration_section->Name=%ls);", fabric_configuration_section->Name);
                    result = MU_FAILURE;
                }
                else
                {
                    int g_argc;
                    char** g_argv;
                    if (FABRIC_CONFIGURATION_PARAMETER_LIST_to_ARGC_ARGV(fabric_configuration_section->Parameters, &g_argc, &g_argv) != 0)
                    {
                        LogError("failure in FABRIC_CONFIGURATION_PARAMETER_LIST_to_ARGC_ARGV");
                        result = MU_FAILURE;
                    }
                    else
                    {
                        if (ARGC_ARGV_concat(argc, argv, g_argc, g_argv) != 0)
                        {
                            ARGC_ARGV_free(g_argc, g_argv);
                            LogError("failure in ARGC_ARGV_concat");
                            result = MU_FAILURE;
                        }
                        else
                        {
                            ARGC_ARGV_free(g_argc, g_argv);
                            result = 0;
                            goto allok;
                        }
                    }

                    free(argv[1]);
                }

                free(argv[0]);
            }

            free(*argv);
        }
    }

allok:;
    return result;
}