+/* Copy an environment block. */
+TCHAR *copy_environment_block(TCHAR *env) {
+ unsigned long len;
+
+ if (! env) return 0;
+ for (len = 0; env[len]; len++) while (env[len]) len++;
+ if (! len++) return 0;
+
+ TCHAR *newenv = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, len * sizeof(TCHAR));
+ if (! newenv) {
+ log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, _T("environment"), _T("copy_environment_block()"), 0);
+ return 0;
+ }
+
+ memmove(newenv, env, len * sizeof(TCHAR));
+ return newenv;
+}
+