in src/native/windows/src/cmdline.c [263:326]
void apxCmdlineLoadEnvVars(
LPAPXCMDLINE lpCmdline)
{
WCHAR szEnv[64];
int i = 0;
if (!lpCmdline || !lpCmdline->lpOptions)
return;
while (lpCmdline->lpOptions[i].szName) {
DWORD l;
WCHAR szVar[SIZ_HUGLEN];
lstrlcpyW(szEnv, 64, L"PR_");
lstrlcatW(szEnv, 64, lpCmdline->lpOptions[i].szName);
l = GetEnvironmentVariableW(szEnv, szVar, SIZ_HUGMAX);
if (l == 0 || l >= SIZ_HUGMAX) {
if (l == 0) {
if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
// Explicitly clear the error else it will be logged the
// next time a log message is written
SetLastError(0);
} else {
apxLogWrite(APXLOG_MARK_ERROR "Error getting environment variable %S",
szEnv);
return;
}
}
++i;
continue;
}
if (lpCmdline->lpOptions[i].dwType & APXCMDOPT_STR) {
lpCmdline->lpOptions[i].szValue = apxPoolStrdupW(lpCmdline->hPool, szVar);
lpCmdline->lpOptions[i].dwType |= APXCMDOPT_FOUND;
}
else if (lpCmdline->lpOptions[i].dwType & APXCMDOPT_INT) {
lpCmdline->lpOptions[i].dwValue = (DWORD)apxAtoulW(szVar);
lpCmdline->lpOptions[i].dwType |= APXCMDOPT_FOUND;
}
else if (lpCmdline->lpOptions[i].dwType & APXCMDOPT_MSZ) {
LPWSTR pp;
BOOL insquote = FALSE, indquote = FALSE;
DWORD sp = 0;
lpCmdline->lpOptions[i].dwValue = (lstrlenW(szVar) + 2) * sizeof(WCHAR);
lpCmdline->lpOptions[i].szValue = apxPoolCalloc(lpCmdline->hPool,
lpCmdline->lpOptions[i].dwValue);
pp = szVar;
while(*pp) {
if (*pp == L'\'')
insquote = !insquote;
else if (*pp == L'"') {
indquote = !indquote;
lpCmdline->lpOptions[i].szValue[sp++] = L'"';
}
else if ((*pp == L'#' || *pp == L';') && !insquote && !indquote)
lpCmdline->lpOptions[i].szValue[sp++] = L'\0';
else
lpCmdline->lpOptions[i].szValue[sp++] = *pp;
pp++;
}
lpCmdline->lpOptions[i].dwType |= APXCMDOPT_FOUND | APXCMDOPT_ADD;
}
++i;
}
}