void setAdditionalArguments()

in src/main/cpp/launcher/windows/src/Launcher.c [551:642]


void setAdditionalArguments(LauncherProperties * props) {
    if(isOK(props)) {
        WCHARList * cmd = props->commandLine;
        WCHAR ** javaArgs;
        WCHAR ** appArgs;
        DWORD i=0;
        DWORD jArg = 0; // java arguments number
        DWORD aArg = 0; // app arguments number
        
        writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0,
                "Parsing rest of command line arguments to add them to java or application parameters... ", 1);
        
        // get number for array creation
        for(i=0;i<cmd->size;i++) {
            if(cmd->items[i]!=NULL) {
                if(searchW(cmd->items[i], javaParameterPrefix)!=NULL) {
                    jArg++;
                } else {
                    aArg++;
                }
            }
        }
        
        // handle DefaultUserDirRoot, DefaultCacheDirRoot - increasing array size
        jArg = jArg + 2;
        
        //fill the array
        if(jArg>0) {
            int size = jArg + props->jvmArguments->size;
            writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, DWORDtoCHAR(size), 1);
            javaArgs = newppWCHAR(jArg + props->jvmArguments->size);
            for (i=0;i<props->jvmArguments->size;i++) {
                javaArgs[i] = props->jvmArguments->items[i];
            }
            FREE(props->jvmArguments->items);
            
            // cont. handle DefaultUserDirRoot, DefaultCacheDirRoot
            // * add -Dnetbeans.default_userdir_root
            // * add -Dnetbeans.default_cachedir_root
            javaArgs[i-2] = appendStringW(toWCHAR("-Dnetbeans.default_userdir_root="), props->defaultUserDirRoot);
            writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "Added an JVM argument: ", 0);
            writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, javaArgs[i-2], 1);
            
            javaArgs[i-1] = appendStringW(toWCHAR("-Dnetbeans.default_cachedir_root="), props->defaultCacheDirRoot);
            writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "Added an JVM argument: ", 0);
            writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, javaArgs[i-1], 1);
        } else {
            javaArgs = NULL;
        }
        
        if(aArg>0) {
            appArgs = newppWCHAR(aArg + props->appArguments->size);
            for (i=0; i < props->appArguments->size; i++) {
                appArgs [i]= props->appArguments->items[i];
            }
            FREE(props->appArguments->items);
        } else {
            appArgs = NULL;
        }
        jArg = aArg = 0;
        
        for(i=0;i<cmd->size;i++) {
            if(cmd->items[i]!=NULL) {
                if(searchW(cmd->items[i], javaParameterPrefix)!=NULL) {
                    javaArgs [ props->jvmArguments->size + jArg] = appendStringW(NULL, cmd->items[i] + getLengthW(javaParameterPrefix));
                    writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... adding JVM argument : ", 0);
                    writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, javaArgs [ props->jvmArguments->size + jArg], 1);
                    jArg ++ ;
                } else {
                    appArgs  [ props->appArguments->size + aArg] = appendStringW(NULL, cmd->items[i]);
                    writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... adding APP argument : ", 0);
                    writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, appArgs  [ props->appArguments->size + aArg], 1);
                    aArg++;
                }
                FREE(cmd->items[i]);
            }
        }
        props->appArguments->size  = props->appArguments->size + aArg;
        props->jvmArguments->size  = props->jvmArguments->size + jArg;
        if(props->jvmArguments->items==NULL) props->jvmArguments->items = javaArgs;
        if(props->appArguments->items==NULL) props->appArguments->items = appArgs;
        writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... resolving jvm arguments", 1);
        for(i=0;i<props->jvmArguments->size;i++) {
            resolveString(props, &props->jvmArguments->items[i]);
        }
        writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... resolving app arguments", 1);
        for(i=0;i<props->appArguments->size;i++) {
            resolveString(props, &props->appArguments->items[i]);
        }
        writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... finished parsing parameters", 1);
    }
}