return 0;\r
}\r
\r
-/* Replace NULL with CRLF. Leave NULL NULL as the end marker. */\r
-int format_environment(TCHAR *env, unsigned long envlen, TCHAR **formatted, unsigned long *newlen) {\r
- unsigned long i, j;\r
- *newlen = envlen;\r
-\r
- if (! *newlen) {\r
- *formatted = 0;\r
- return 0;\r
- }\r
-\r
- for (i = 0; i < envlen; i++) if (! env[i] && env[i + 1]) ++*newlen;\r
-\r
- *formatted = (TCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *newlen * sizeof(TCHAR));\r
- if (! *formatted) {\r
- *newlen = 0;\r
- return 1;\r
- }\r
-\r
- for (i = 0, j = 0; i < envlen; i++) {\r
- (*formatted)[j] = env[i];\r
- if (! env[i]) {\r
- if (env[i + 1]) {\r
- (*formatted)[j] = _T('\r');\r
- (*formatted)[++j] = _T('\n');\r
- }\r
- }\r
- j++;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-/* Strip CR and replace LF with NULL. */\r
-int unformat_environment(TCHAR *env, unsigned long envlen, TCHAR **unformatted, unsigned long *newlen) {\r
- unsigned long i, j;\r
- *newlen = 0;\r
-\r
- if (! envlen) {\r
- *unformatted = 0;\r
- return 0;\r
- }\r
-\r
- for (i = 0; i < envlen; i++) if (env[i] != _T('\r')) ++*newlen;\r
- /* Must end with two NULLs. */\r
- *newlen += 2;\r
-\r
- *unformatted = (TCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *newlen * sizeof(TCHAR));\r
- if (! *unformatted) return 1;\r
-\r
- for (i = 0, j = 0; i < envlen; i++) {\r
- if (env[i] == _T('\r')) continue;\r
- if (env[i] == _T('\n')) (*unformatted)[j] = _T('\0');\r
- else (*unformatted)[j] = env[i];\r
- j++;\r
- }\r
-\r
- return 0;\r
-}\r
\r
int get_string(HKEY key, TCHAR *value, TCHAR *data, unsigned long datalen, bool expand, bool sanitise, bool must_exist) {\r
TCHAR *buffer = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, datalen);\r