+ return ret;
+}
+
+int set_environment_block(TCHAR *env) {
+ return set_environment_block(env, true);
+}
+
+static int unset_environment_block(TCHAR *env) {
+ return set_environment_block(env, false);
+}
+
+/* Remove all variables from the process environment. */
+int clear_environment() {
+ TCHAR *rawenv = GetEnvironmentStrings();
+ TCHAR *env = useful_environment(rawenv);
+
+ int ret = unset_environment_block(env);
+
+ if (rawenv) FreeEnvironmentStrings(rawenv);
+
+ return ret;
+}
+
+/* Set the current environment to exactly duplicate an environment block. */
+int duplicate_environment(TCHAR *rawenv) {
+ int ret = clear_environment();
+ TCHAR *env = useful_environment(rawenv);
+ ret += set_environment_block(env);
+ return ret;