木村です。

        In article [ruby-ext:00123] Re: clearenv
          (<199903080815.RAA26584 / po.aianet.ne.jp>),
	  Shugo Maeda <shugo / netlab.co.jp> writes:

>やはりまずいのですね:-(
># Windowsにclearenv相当の機能があればすべて解決なのですが。
>
>> それと念のため確認ですが、目的はカレントプロセス(とその子プロセ
>> ス)の環境変数を空にしたいということなのですよね?
>
>はい、そうです。

ちょっと悩まされましたが以下の関数でクリアできます。APIとCの関数
混在なのが美しくありませんが、こうしないとAPIで取得したときとラ
イブラリ関数で取得したときとの辻褄が合わないのです。

putenvの引数は独立した領域でなくていいのだろうか、とも思うのです
が、ヘルプを見た限りではそういった注意事項はなかったのでお手軽に
すませてしまいました。

ところで、hash.cにあるruby_unsetenv()はあのままだと mswin32だと
問題ありそうですね(ruby_setenv()と対応が取れてない)。perlにない
ようなら(setenvのWIN32部分はperlから持ってきたとみているんですが)
早めに対応の関数書きます。

#include <windows.h>
#include <stdlib.h>

void
clear_enviromnet_variables()
{
	char *orgp, *p;

	orgp = p = GetEnvironmentStrings();

	if (p == NULL)
		return;

	while (*p) {
		char buf[1024];
		char *q;

		strncpy(buf, p, sizeof buf);
		q = strchr(buf, '=');
		if (q)
			*(q+1) = '\0';

		putenv(buf);
		p += strlen(p) + 1;
	}

	FreeEnvironmentStrings(orgp);

}





-- 
木村浩一
            May the source be with you.
    e-mail kbk / kt.rim.or.jp
           kimura / sqa.canon.co.jp