From: Akinori MUSHA Date: 2010-01-11T13:28:01+09:00 Subject: [ruby-dev:40026] Re: [Bug:trunk] ENV.[]= should raise an error on failure --pgp-sign-Multipart_Mon_Jan_11_13:27:59_2010-1 Content-Type: text/plain; charset=ISO-2022-JP At Mon, 11 Jan 2010 09:27:58 +0900, matz wrote: > In message "Re: [ruby-dev:40023] [Bug:trunk] ENV.[]= should raise an error on failure" > on Mon, 11 Jan 2010 03:42:34 +0900, "Akinori MUSHA" writes: > > | 現在 ENV.[]= は setenv(3) や putenv(3) の返り値を見ていませんが、 > |エラーは検知して例外を上げるべきではないでしょうか。 > | > | わかりやすい例では ENV["A="] = "1" のように不正な名前の環境変数を > |設定しようとすると Error::EINVAL が発生するようになります。 > > 賛成します。コミットしてくださいませんか。  コミットしました。  さらに、 putenv(3) を呼ぶ(name と value を呼び出し側で合成する) 環境では name 中の '=' を検知して EINVAL をエミュレートすべきかも しれませんね。少し調べてからやります。  なお、 #if defined(_WIN32) の中はいじらないでおきました。以下の 部分で、 Windowsの場合は putenv(3) の失敗を織り込んでいるようにも 読めるからです。 2052 putenv(buf); 2053 2054 /* putenv() doesn't handle empty value */ 2055 if (*value) 2056 SetEnvironmentVariable(name,value); ところで、このコメントもそのまま取ると以下のようにするのが正しい ように思えますが、真意は何でしょうか。 if (*value) { /* bufの作成 */ putenv(buf); } else { SetEnvironmentVariable(name, value); } -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Mon_Jan_11_13:27:59_2010-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEABECAAYFAktKqM8ACgkQkgvvx5/Z4e52IACg0c5A/0nArP3HJDHxFznfsT53 Ro0An0kPP6O/JLwzVg5zQHTwGeeLD8oy =FRGe -----END PGP SIGNATURE----- --pgp-sign-Multipart_Mon_Jan_11_13:27:59_2010-1--