in src/fc_activation_context.c [496:620]
int IFabricCodePackageActivationContext_to_ARGC_ARGV(IFabricCodePackageActivationContext* iFabricCodePackageActivationContext, int* argc, char*** argv)
{
int result;
if (
(iFabricCodePackageActivationContext == NULL) ||
(argc == NULL) ||
(argv == NULL)
)
{
LogError("invalid argument IFabricCodePackageActivationContext* iFabricCodePackageActivationContext=%p, int* argc=%p, char*** argv=%p",
iFabricCodePackageActivationContext, argc, argv);
result = MU_FAILURE;
}
else
{
HRESULT hr;
*argc = 0;
*argv = NULL;
IFabricStringListResult* fabricStringListResult;
hr = iFabricCodePackageActivationContext->lpVtbl->GetConfigurationPackageNames(iFabricCodePackageActivationContext, &fabricStringListResult);
if (FAILED(hr))
{
LogHRESULTError(hr, "failure in GetConfigurationPackageNames");
result = MU_FAILURE;
}
else
{
ULONG nStrings;
const wchar_t** strings;
hr = fabricStringListResult->lpVtbl->GetStrings(fabricStringListResult, &nStrings, &strings);
if (FAILED(hr))
{
LogHRESULTError(hr, "failure in GetStrings");
result = MU_FAILURE;
}
else
{
ULONG i;
bool wasError = false;
for (i = 0; !wasError && i < nStrings; i++)
{
IFabricConfigurationPackage* configPackage;
hr = iFabricCodePackageActivationContext->lpVtbl->GetConfigurationPackage(iFabricCodePackageActivationContext, strings[i], &configPackage);
if (FAILED(hr))
{
wasError = true;
LogHRESULTError(hr, "failure in GetConfigurationPackage");
}
else
{
int p_argc;
char** p_argv;
if (IFabricConfigurationPackage_to_ARGC_ARGV(configPackage, &p_argc, &p_argv) != 0)
{
wasError = true;
LogError("failure in IFabricConfigurationPackage_to_ARGC_ARGV");
}
else
{
if (ARGC_ARGV_concat(argc, argv, p_argc, p_argv) != 0)
{
wasError = true;
LogError("Failure in ARGC_ARGV_concat");
}
else
{
/*all nice keep going*/
}
ARGC_ARGV_free(p_argc, p_argv);
}
configPackage->lpVtbl->Release(configPackage);
}
}
if (wasError)
{
ARGC_ARGV_free(*argc, *argv);
LogError("failing because of previous logged error");
result = MU_FAILURE;
}
else
{
/*add the rest of the serviceEndpointDescriptions*/
const FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_LIST* list = iFabricCodePackageActivationContext->lpVtbl->get_ServiceEndpointResources(iFabricCodePackageActivationContext);
if (list == NULL)
{
LogError("failure in get_ServiceEndpointResources");
result = MU_FAILURE;
}
else
{
int p_argc;
char** p_argv;
if (FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_LIST_to_ARGC_ARGV(list, &p_argc, &p_argv) != 0)
{
LogError("failure in FABRIC_ENDPOINT_RESOURCE_DESCRIPTION_LIST_to_ARGC_ARGV");
result = MU_FAILURE;
}
else
{
if (ARGC_ARGV_concat(argc, argv, p_argc, p_argv) != 0)
{
LogError("failure in ARGC_ARGV_concat");
ARGC_ARGV_free(p_argc, p_argv);
result = MU_FAILURE;
}
else
{
ARGC_ARGV_free(p_argc, p_argv);
result = 0;
}
}
}
result != 0 ? ARGC_ARGV_free(*argc, *argv) : (void)0;
}
}
fabricStringListResult->lpVtbl->Release(fabricStringListResult);
}
}
return result;
}