Bug #590

tmpdir on mswin32

Added by Koichi Sasada over 6 years ago. Updated almost 4 years ago.

[ruby-dev:36493]
Status:Closed
Priority:Low
Assignee:-
ruby -v: Backport:

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)
+ windir = File.expand_path(windir.rstrip.chop)
rescue RuntimeError
begin
getdir = Win32API.new('kernel32',
'GetSystemWindowsDirectory', 'PL', 'L')

--
// SASADA Koichi at atdot dot net
=end

History

#1 Updated by Yukihiro Matsumoto over 6 years ago

=begin
まつもと ゆきひろです

In message "Re: [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

#2 Updated by Koichi Sasada over 6 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

#3 Updated by Yukihiro Matsumoto over 6 years ago

=begin
まつもと ゆきひろです

In message "Re: 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

#4 Updated by Usaku NAKAMURA over 6 years ago

=begin
こんにちは、なかむら(う)です。

In message " 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

#5 Updated by Koichi Sasada over 6 years ago

=begin
 ささだです.

U.Nakamura wrote:

17行目を、
windir = "\0"*(max_pathlen+1)
に変えるだけでよかったりしませんか。

 良いようです.

--
// SASADA Koichi at atdot dot net

=end

#6 Updated by Usaku NAKAMURA over 6 years ago

=begin
こんにちは、なかむら(う)です。

というわけで本件は解決したのですが、それはそれとして、

In message " 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

#7 Updated by Usaku NAKAMURA over 6 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r19513.
=end

#8 Updated by Usaku NAKAMURA over 6 years ago

=begin
こんにちは、なかむら(う)です。

In message " Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 14:44:32, usa@garbagecollect.jp wrote:

In message " 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

#9 Updated by Yukihiro Matsumoto over 6 years ago

=begin
まつもと ゆきひろです

In message "Re: 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

Also available in: Atom PDF