in src/common_argc_argv.c [34:86]
int ARGC_ARGV_concat(int* argc_dest, char*** argv_dest, int argc_source, char** argv_source)
{
int result;
if (
(argc_dest == NULL) ||
(argv_dest == NULL) ||
((argc_source==0) && (argv_source != NULL))
)
{
LogError("invalid argument int* argc_dest=%p, char*** argv_dest=%p, int argc_source=%d, char** argv_source=%p", argc_dest, argv_dest, argc_source, argv_source);
result = MU_FAILURE;
}
else
{
char** temp;
temp = realloc(*argv_dest, ((* argc_dest) + argc_source) * sizeof(char**));
if (temp == NULL)
{
LogError("failure in realloc(argv_dest, (*argc_dest + argc_dest) * sizeof(char**));");
result = MU_FAILURE;
}
else
{
int i;
for (i = 0; i < argc_source; i++)
{
temp[*argc_dest + i] = sprintf_char("%s", argv_source[i]);
if (temp[*argc_dest + i] == NULL)
{
LogError("failure in copyying");
break;
}
else
{
/*all good*/
}
}
/*TODO: clean if it fails*/
if (i != argc_source)
{
result = MU_FAILURE;
}
else
{
*argc_dest += argc_source;
*argv_dest = temp;
result = 0;
}
}
}
return result;
}