int FABRIC_CONFIGURATION_PARAMETER_LIST_to_ARGC_ARGV()

in src/fc_parameter_list_argc_argv.c [18:79]


int FABRIC_CONFIGURATION_PARAMETER_LIST_to_ARGC_ARGV(const FABRIC_CONFIGURATION_PARAMETER_LIST* fabric_configuration_parameter_list , int* argc, char*** argv)
{
    int result;
    if (
        (fabric_configuration_parameter_list == NULL) ||
        (argc == NULL) ||
        (argv == NULL)
        )
    {
        LogError("invalid argument const FABRIC_CONFIGURATION_PARAMETER_LIST* fabric_configuration_parameter_list=%p, int* argc=%p, char*** argv=%p",
            fabric_configuration_parameter_list, argc, argv);
        result = MU_FAILURE;
    }
    else
    {
        if (fabric_configuration_parameter_list->Count == 0)
        {
            /*special case because malloc(0) miiight return "something" or "NULL"*/
            *argc = 0;
            *argv = NULL;
            result = 0;
        }
        else
        {
            *argc = 0;
            *argv = NULL;
            bool was_error = false;
            for (ULONG u = 0; !was_error && u < fabric_configuration_parameter_list->Count; u++)
            {
                int g_argc; /*g_ comes from "generated"*/
                char** g_argv;
                if (FABRIC_CONFIGURATION_PARAMETER_to_ARGC_ARGV(fabric_configuration_parameter_list->Items + u, &g_argc, &g_argv) != 0)
                {
                    LogError("failure in FABRIC_CONFIGURATION_PARAMETER_to_ARGC_ARGV");
                    was_error = true;
                }
                else
                {
                    if (ARGC_ARGV_concat(argc, argv, g_argc, g_argv) != 0)
                    {
                        LogError("failure in ARGC_ARGV_concat");
                        was_error = true;
                    }
                    
                    ARGC_ARGV_free(g_argc, g_argv);
                }
            }

            if (was_error)
            {
                /*TODO: cleanup*/
                result = MU_FAILURE;
            }
            else
            {
                result = 0;
            }
        }
    }
    return result;
   
}