Bug #590
closedtmpdir on mswin32
Description
=begin
ささだです.
tmpdir 初期化時,Win32API の SHGetFolderPath でパスを取ってくる
と,末尾に nul が入るため,expand_path が失敗するようです(rstrip し
ても nul は取れない).とりあえず chop してしまったんですが,どうす
るのが良いでしょうか.
Index: lib/tmpdir.rb¶
--- lib/tmpdir.rb (リビジョン 19506)
+++ lib/tmpdir.rb (作業コピー)
@@ -18,7 +16,7 @@
begin
getdir = Win32API.new('shell32', 'SHGetFolderPath', 'LLLLP', 'L')
raise RuntimeError if getdir.call(0, CSIDL_LOCAL_APPDATA, 0,
0, windir) != 0
-
windir = File.expand_path(windir.rstrip)
-
rescue RuntimeErrorwindir = File.expand_path(windir.rstrip.chop)
begin
getdir = Win32API.new('kernel32',
'GetSystemWindowsDirectory', 'PL', 'L')
--
// SASADA Koichi at atdot dot net
=end
Updated by matz (Yukihiro Matsumoto) over 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:36493] [Bug: 1.9] tmpdir on mswin32"
on Wed, 24 Sep 2008 11:25:33 +0900, SASADA Koichi ko1@atdot.net writes:
| tmpdir 初期化時,Win32API の SHGetFolderPath でパスを取ってくる
|と,末尾に nul が入るため,expand_path が失敗するようです(rstrip し
|ても nul は取れない).とりあえず chop してしまったんですが,どうす
|るのが良いでしょうか.
rstripは末尾のnulを取る作りになってるはずです。とりあえず手
元で試した範囲内では取れます。
=end
Updated by ko1 (Koichi Sasada) over 16 years ago
=begin
ささだです.
Yukihiro Matsumoto wrote:
| tmpdir 初期化時,Win32API の SHGetFolderPath でパスを取ってくる
|と,末尾に nul が入るため,expand_path が失敗するようです(rstrip し
|ても nul は取れない).とりあえず chop してしまったんですが,どうす
|るのが良いでしょうか.rstripは末尾のnulを取る作りになってるはずです。とりあえず手
元で試した範囲内では取れます。
ここで得られる文字列は,"...\x00 " と,末尾に nul + スペース,と
いう構成になっているため「末尾の nul」ではなかったようです.
str = "foo\x00 "
p [str, str.rstrip, str.rstrip.rstrip]
#=> ["foo\000 ", "foo\000", "foo"]
rstrip 2回やるのがいいんでしょうか.
--
// SASADA Koichi at atdot dot net
=end
Updated by matz (Yukihiro Matsumoto) over 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:36495] Re: [Bug: 1.9] tmpdir on mswin32"
on Wed, 24 Sep 2008 11:45:09 +0900, SASADA Koichi ko1@atdot.net writes:
| ここで得られる文字列は,"...\x00 " と,末尾に nul + スペース,と
|いう構成になっているため「末尾の nul」ではなかったようです.
|
|str = "foo\x00 "
|p [str, str.rstrip, str.rstrip.rstrip]
|#=> ["foo\000 ", "foo\000", "foo"]
|
| rstrip 2回やるのがいいんでしょうか.
うーん、じゃあ、「rstripを末尾のnulかスペースを削除」という仕
様にしてしまう(1.9では)というのはどうでしょうか。
=end
Updated by usa (Usaku NAKAMURA) over 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:36495] Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 11:45:09, ko1@atdot.net wrote:
ここで得られる文字列は,"...\x00 " と,末尾に nul + スペース,と
いう構成になっているため「末尾の nul」ではなかったようです.
17行目を、
windir = "\0"*(max_pathlen+1)
に変えるだけでよかったりしませんか。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by ko1 (Koichi Sasada) over 16 years ago
=begin
ささだです.
U.Nakamura wrote:
17行目を、
windir = "\0"*(max_pathlen+1)
に変えるだけでよかったりしませんか。
良いようです.
--
// SASADA Koichi at atdot dot net
=end
Updated by usa (Usaku NAKAMURA) over 16 years ago
=begin
こんにちは、なかむら(う)です。
というわけで本件は解決したのですが、それはそれとして、
In message "[ruby-dev:36497] Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 14:15:17, matz@ruby-lang.org wrote:
うーん、じゃあ、「rstripを末尾のnulかスペースを削除」という仕
様にしてしまう(1.9では)というのはどうでしょうか。
というのは嬉しいのでぜひとも。
あと、strip系にdeleteのように引数として削除する文字集合を渡せ
るようにするというアイデアもありますが、こっちはスクリプトの
互換性を破壊しないので、やるとしても1.9.1以降でもいいのかな。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by usa (Usaku NAKAMURA) over 16 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r19513.
=end
Updated by usa (Usaku NAKAMURA) over 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:36500] Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 14:44:32, usa@garbagecollect.jp wrote:
In message "[ruby-dev:36497] Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 14:15:17, matz@ruby-lang.org wrote:うーん、じゃあ、「rstripを末尾のnulかスペースを削除」という仕
様にしてしまう(1.9では)というのはどうでしょうか。というのは嬉しいのでぜひとも。
早速入りましたが、lstripも同様にしちゃいけないでしょうか?
あと、元々あったわけですが、t[-1]はVC++8 x64でバグることが¶
あるので避けて欲しいです。¶
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by matz (Yukihiro Matsumoto) over 16 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:36503] Re: [Bug: 1.9] tmpdir on mswin32"
on Wed, 24 Sep 2008 17:02:14 +0900, "U.Nakamura" usa@garbagecollect.jp writes:
|早速入りましたが、lstripも同様にしちゃいけないでしょうか?
どーなんでしょうねえ。あんまり困ってないんですが。
|# あと、元々あったわけですが、t[-1]はVC++8 x64でバグることが
|# あるので避けて欲しいです。
こっちは私にはよくわかんないんで、適当に修正してコミットして
ください。どうしたらバグが避けられるか知りようがないので。
=end