in src/native/windows/src/javajni.c [506:555]
static DWORD __apxMultiSzToJvmOptions(APXHANDLE hPool,
LPCSTR lpString,
LPCSTR lpString9,
JavaVMOption **lppArray,
DWORD nExtra,
DWORD bJniVfprintf)
{
DWORD i = 0, n = 0, n9 = 0, nTotal, l = 0, l9 = 0, lTotal;
char *buff;
LPSTR p;
if (lpString) {
l = __apxGetMultiSzLengthA(lpString, &n);
}
if (__apxIsJava9() && lpString9) {
l9 = __apxGetMultiSzLengthA(lpString9, &n9);
}
nTotal = n + n9 + nExtra;
lTotal = l + l9;
buff = apxPoolAlloc(hPool, (nTotal + 1) * sizeof(JavaVMOption) + (lTotal + 1));
*lppArray = (JavaVMOption *)buff;
p = (LPSTR)(buff + (nTotal + 1) * sizeof(JavaVMOption));
if (lpString)
AplCopyMemory(p, lpString, l + 1);
if (bJniVfprintf) {
// If present, vfprintf is set first so it can be used to report errors
// in later options. Increment indexes to account for this.
i++;
n++;
}
for (; i < n; i++) {
(*lppArray)[i].optionString = p;
while (*p)
p++;
p++;
}
if (lpString9)
AplCopyMemory(p, lpString9, l9 + 1);
for (; i < (n + n9); i++) {
(*lppArray)[i].optionString = p;
while (*p)
p++;
p++;
}
return nTotal;
}