Project

General

Profile

Actions

Bug #590

closed

tmpdir on mswin32

Added by ko1 (Koichi Sasada) over 16 years ago. Updated over 13 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
Backport:
[ruby-dev:36493]

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

Actions #1

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 writes:

| tmpdir 初期化時,Win32API の SHGetFolderPath でパスを取ってくる
|と,末尾に nul が入るため,expand_path が失敗するようです(rstrip し
|ても nul は取れない).とりあえず chop してしまったんですが,どうす
|るのが良いでしょうか.

rstripは末尾のnulを取る作りになってるはずです。とりあえず手
元で試した範囲内では取れます。

=end

Actions #2

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

Actions #3

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 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

Actions #4

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, wrote:

 ここで得られる文字列は,"...\x00 " と,末尾に nul + スペース,と
いう構成になっているため「末尾の nul」ではなかったようです.

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

それでは。

U.Nakamura

=end

Actions #5

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

Actions #6

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, wrote:

うーん、じゃあ、「rstripを末尾のnulかスペースを削除」という仕
様にしてしまう(1.9では)というのはどうでしょうか。

というのは嬉しいのでぜひとも。

あと、strip系にdeleteのように引数として削除する文字集合を渡せ
るようにするというアイデアもありますが、こっちはスクリプトの
互換性を破壊しないので、やるとしても1.9.1以降でもいいのかな。

それでは。

U.Nakamura

=end

Actions #7

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

Actions #8

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, wrote:

In message "[ruby-dev:36497] Re: [Bug: 1.9] tmpdir on mswin32"
on Sep.24,2008 14:15:17, wrote:

うーん、じゃあ、「rstripを末尾のnulかスペースを削除」という仕
様にしてしまう(1.9では)というのはどうでしょうか。

というのは嬉しいのでぜひとも。

早速入りましたが、lstripも同様にしちゃいけないでしょうか?

あと、元々あったわけですが、t[-1]はVC++8 x64でバグることが

あるので避けて欲しいです。

それでは。

U.Nakamura

=end

Actions #9

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" writes:

|早速入りましたが、lstripも同様にしちゃいけないでしょうか?

どーなんでしょうねえ。あんまり困ってないんですが。

|# あと、元々あったわけですが、t[-1]はVC++8 x64でバグることが
|# あるので避けて欲しいです。

こっちは私にはよくわかんないんで、適当に修正してコミットして
ください。どうしたらバグが避けられるか知りようがないので。

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0