static DWORD __apxMultiSzToJvmOptions(APXHANDLE hPool, LPCSTR lpString, JavaVMOption **lppArray, DWORD nExtra) { DWORD i, n = 0, l = 0; char *buff; LPSTR p; if (lpString) { l = __apxGetMultiSzLengthA(lpString, &n); } n += nExtra; buff = apxPoolAlloc(hPool, (n + 1) * sizeof(JavaVMOption) + (l + 1)); *lppArray = (JavaVMOption *)buff; p = (LPSTR)(buff + (n + 1) * sizeof(JavaVMOption)); if (lpString) AplCopyMemory(p, lpString, l + 1); for (i = 0; i < (n - nExtra); i++) { DWORD qr = apxStrUnQuoteInplaceA(p); (*lppArray)[i].optionString = p; while (*p) p++; p++; p += qr; } return n; }
DWORD apxMultiSzToArrayA(APXHANDLE hPool, LPCSTR lpString, LPSTR **lppArray) { DWORD i, n, l; char *buff; LPSTR p; l = __apxGetMultiSzLengthA(lpString, &n); if (!n || !l) return 0; if (IS_INVALID_HANDLE(hPool)) buff = apxPoolAlloc(hPool, (n + 2) * sizeof(LPTSTR) + (l + 1)); else buff = apxAlloc((n + 2) * sizeof(LPSTR) + (l + 1) * sizeof(CHAR)); *lppArray = (LPSTR *)buff; p = (LPSTR)(buff + (n + 2) * sizeof(LPSTR)); AplCopyMemory(p, lpString, (l + 1) * sizeof(CHAR)); for (i = 0; i < n; i++) { (*lppArray)[i] = p; while (*p) p++; p++; } (*lppArray)[++i] = NULL; return n; }