Project

General

Profile

Actions

Bug #282

closed

failure of test_asctime(TestTime) on mswin32

Added by usa (Usaku NAKAMURA) over 16 years ago. Updated over 13 years ago.

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

Description

=begin
表題の通りですが、忘れないように記録に残しておきます。

test_asctime(TestTime) [(snip)/test/ruby/test_time.rb:291]:
<"Sat Jan 1 00:00:00 2000"> expected but was
<"Sat Jan 01 00:00:00 2000">.

C90を読む限りは日付の部分は月名部分に続けて "%3d" なので、MSVCRTのバグです。
しかしわざわざ対策すべきかどうかは微妙。
=end

Actions #1

Updated by wanabe (_ wanabe) about 16 years ago

=begin
ワナベです。

2008/08/12 20:56 木村浩一 :

・_WIN32というシンボルは対象が広すぎ(MSVCRTを使わないものも含む)
・MSVCRTのバグに対する workaround ということを明確にすべき

と思います。
後者はコメントをつけるなり、いかにもという名前で判定するなり。

なるほど。そうしますとどうするのがいいのでしょう。
#if defined(MSVCRT) || defined(_MSC_VER)
という式を考えたのですが、わかりやすい(後者を満たしている)とは思えません。
何かほかの定数や configure の結果などを使ってうまくできないものでしょうか。

--
ワナベ

=end

Actions #2

Updated by wanabe (_ wanabe) about 16 years ago

=begin
ワナベと申します。

2008/07/17 6:59 Usaku NAKAMURA :

test_asctime(TestTime) [(snip)/test/ruby/test_time.rb:291]:
<"Sat Jan 1 00:00:00 2000"> expected but was
<"Sat Jan 01 00:00:00 2000">.

C90を読む限りは日付の部分は月名部分に続けて "%3d" なので、MSVCRTのバグです。
しかしわざわざ対策すべきかどうかは微妙。

単純にこんな風に対応してしまうのは駄目なのでしょうか。
テストが毎回失敗するのは何だか気になります。

Index: time.c

--- time.c (revision 18359)
+++ time.c (working copy)
@@ -1339,6 +1339,9 @@
}
s = asctime(&tobj->tm);
if (s[24] == '\n') s[24] = '\0';
+#ifdef _WIN32

  • if (s[7] == ' ' && s[8] == '0') s[8] = ' ';
    +#endif

    return rb_str_new2(s);
    }

--
ワナベ

=end

Actions #3

Updated by usa (Usaku NAKAMURA) about 16 years ago

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

なぜか反応が遅くなってしまいましたが、

In message "[ruby-dev:35849] Re: [Ruby 1.9 - Bug #282] (Open) failure of test_asctime(TestTime) on mswin32"
on Aug.14,2008 01:43:49, wrote:

#if (defined _MT || defined MSVCRT) && !defined BORLANDC
#define MSVCRT_THREADS
#endif

このパターンと同様に config.h あたりで

#define AVOID_MSVCRT_BUG

という定義をしてしまうとか。

config.h を作るときにいろいろほかにも小さなプログラムを作りながら
検査していますので、この問題のチェックのためのステップを入れても
いいと思いますがどうでしょうか(やる場合の話として)。

ここまでやるほどのことかなあ、と思ったので、

でも
#if defined(MSVCRT) || defined(_MSC_VER)
で判定しておいて、きちんとコメントをつけておくだけでいいという気もします。

その程度でお茶を濁してcommitしました。
お二人ともいろいろありがとうございました。

ところで問題になっているこの挙動は、msvcr[789].dll でも同様なんでしょうか?

全部同じです。

それでは。

U.Nakamura

=end

Actions #4

Updated by usa (Usaku NAKAMURA) about 16 years ago

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

=begin
Applied in changeset r18871.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0