return 0;\r
}\r
\r
-int set_environment(TCHAR *service_name, HKEY key, TCHAR *value, TCHAR **env, unsigned long *envlen) {\r
+int get_environment(TCHAR *service_name, HKEY key, TCHAR *value, TCHAR **env, unsigned long *envlen) {\r
unsigned long type = REG_MULTI_SZ;\r
\r
/* Dummy test to find buffer size */\r
*env = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, *envlen);\r
if (! *env) {\r
*envlen = 0;\r
- log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, value, _T("set_environment()"), 0);\r
+ log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, value, _T("get_environment()"), 0);\r
return 3;\r
}\r
\r
}\r
\r
/* Try to get environment variables - may fail */\r
- set_environment(service->name, key, NSSM_REG_ENV, &service->env, &service->envlen);\r
+ get_environment(service->name, key, NSSM_REG_ENV, &service->env, &service->envlen);\r
/* Environment variables to add to existing rather than replace - may fail. */\r
- set_environment(service->name, key, NSSM_REG_ENV_EXTRA, &service->env_extra, &service->env_extralen);\r
-\r
- if (si) {\r
- if (service->env_extra) {\r
- TCHAR *env;\r
- unsigned long envlen;\r
-\r
- /* Copy our environment for the application. */\r
- if (! service->env) {\r
- TCHAR *rawenv = GetEnvironmentStrings();\r
- env = rawenv;\r
- if (env) {\r
- /*\r
- The environment block starts with variables of the form\r
- =C:=C:\Windows\System32 which we ignore.\r
- */\r
- while (*env == _T('=')) {\r
- for ( ; *env; env++);\r
- env++;\r
- }\r
- envlen = 0;\r
- if (*env) {\r
- while (true) {\r
- for ( ; env[envlen]; envlen++);\r
- if (! env[++envlen]) break;\r
- }\r
- envlen++;\r
-\r
- service->envlen = envlen * sizeof(TCHAR);\r
- service->env = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, service->envlen);\r
- memmove(service->env, env, service->envlen);\r
- FreeEnvironmentStrings(rawenv);\r
- }\r
- }\r
- }\r
-\r
- /* Append extra variables to configured variables. */\r
- if (service->env) {\r
- envlen = service->envlen + service->env_extralen - sizeof(TCHAR)/*?*/;\r
- env = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, envlen);\r
- if (env) {\r
- memmove(env, service->env, service->envlen - sizeof(TCHAR));\r
- /* envlen is in bytes but env[i] is in characters. */\r
- memmove(env + (service->envlen / sizeof(TCHAR)) - 1, service->env_extra, service->env_extralen);\r
-\r
- HeapFree(GetProcessHeap(), 0, service->env);\r
- HeapFree(GetProcessHeap(), 0, service->env_extra);\r
- service->env = env;\r
- service->envlen = envlen;\r
- }\r
- else log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, _T("environment"), _T("get_parameters()"), 0);\r
- }\r
- else {\r
- /* Huh? No environment at all? */\r
- service->env = service->env_extra;\r
- service->envlen = service->env_extralen;\r
- }\r
- }\r
-\r
- service->env_extra = 0;\r
- service->env_extralen = 0;\r
- }\r
+ get_environment(service->name, key, NSSM_REG_ENV_EXTRA, &service->env_extra, &service->env_extralen);\r
\r
/* Try to get priority - may fail. */\r
unsigned long priority;\r