int ARGC_ARGV_concat()

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;
}