int FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_to_ARGC_ARGV()

in src/fc_erd_argc_argv.c [23:126]


int FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_to_ARGC_ARGV(const FABRIC_ENDPOINT_RESOURCE_DESCRIPTION* fabric_endpoint_resource_description, int* argc, char*** argv)
{
    int result;
    if (
        (fabric_endpoint_resource_description == NULL) ||
        (argc == NULL) ||
        (argv == NULL)
        )
    {
        LogError("invalid argument const FABRIC_ENDPOINT_RESOURCE_DESCRIPTION* fabric_endpoint_resource_description=%p, int* argc=%p, char*** argv=%p",
            fabric_endpoint_resource_description, argc, argv);
        result = MU_FAILURE;
    }
    else
    {
        *argc = 6;
        *argv = malloc_2(*argc, sizeof(char*));
        if (*argv == NULL)
        {
            LogError("failure in malloc2");
            result = MU_FAILURE;
        }
        else
        {
            (* argv)[0] = sprintf_char("%s", SERVICE_ENDPOINT_RESOURCE);
            if ((*argv)[0] == NULL)
            {
                LogError("failure in sprintf_char");
                result = MU_FAILURE;
            }
            else
            {
                (*argv)[1] = sprintf_char("%ls", fabric_endpoint_resource_description->Name);
                if ((*argv)[1] == NULL)
                {
                    LogError("failure in sprintf_char");
                    result = MU_FAILURE;
                }
                else
                {
                    (*argv)[2] = sprintf_char("%ls", fabric_endpoint_resource_description->Protocol);
                    if ((*argv)[2] == NULL)
                    {
                        LogError("failure in sprintf_char");
                        result = MU_FAILURE;
                    }
                    else
                    {
                        (*argv)[3] = sprintf_char("%ls", fabric_endpoint_resource_description->Type);
                        if ((*argv)[3] == NULL)
                        {
                            LogError("failure in sprintf_char");
                            result = MU_FAILURE;
                        }
                        else
                        {
                            (*argv)[4] = sprintf_char("%" PRIu16 "", fabric_endpoint_resource_description->Port);
                            if ((*argv)[4] == NULL)
                            {
                                LogError("failure in sprintf_char");
                                result = MU_FAILURE;
                            }
                            else
                            {
                                if (
                                    (fabric_endpoint_resource_description->CertificateName == NULL) ||
                                    (fabric_endpoint_resource_description->CertificateName[0] == L'\0')
                                    )
                                {
                                    /*if CertificateName is L"" or NULL and that is passed as an argv to a command line - it gets eaten and later FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_from_ARGC_ARGV expects 6 arguments but only gets 5*/
                                    (*argv)[5] = sprintf_char("%ls", L"CERTIFICATE_NAME_WAS_EMPTY_IN_FABRIC_ENDPOINT_RESOURCE_DESCRIPTION");
                                }
                                else
                                {
                                    (*argv)[5] = sprintf_char("%ls", fabric_endpoint_resource_description->CertificateName);
                                }

                                if ((*argv)[5] == NULL)
                                {
                                    LogError("failure in sprintf_char");
                                    result = MU_FAILURE;
                                }
                                else
                                {
                                    result = 0;
                                    goto allok;
                                    //free((*argv)[5]);
                                }
                                free((*argv)[4]);
                            }
                            free((*argv)[3]);
                        }
                        free((*argv)[2]);
                    }
                    free((*argv)[1]);
                }
                free((*argv)[0]);
            }
            free(*argv);
        }
    }
allok:;
    return result;
}