Bug #282
failure of test_asctime(TestTime) on mswin32
| Status: | Closed | Start date: | 07/17/2008 | |
|---|---|---|---|---|
| Priority: | Low | Due date: | ||
| Assignee: | % Done: | 100% |
||
| Category: | - | |||
| Target version: | - | |||
| ruby -v: |
Description
表題の通りですが、忘れないように記録に残しておきます。 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のバグです。 しかしわざわざ対策すべきかどうかは微妙。
Associated revisions
* time.c (time_asctime): workaround for MSVCRT's bug.
based on a patch from wanabe <s.wanabe AT gmail.com> at
[ruby-dev:35831] and a suggestion by KIMURA Koichi
<kbk AT kt.rim.or.jp> at [ruby-dev:35832]
fixed [ruby-dev:35555]
History
Updated by wanabe (_ wanabe) almost 4 years ago
ワナベです。 2008/08/12 20:56 木村浩一 <kbk@kt.rim.or.jp>: > ・_WIN32というシンボルは対象が広すぎ(MSVCRTを使わないものも含む) > ・MSVCRTのバグに対する workaround ということを明確にすべき > > と思います。 > 後者はコメントをつけるなり、いかにもという名前で判定するなり。 なるほど。そうしますとどうするのがいいのでしょう。 #if defined(__MSVCRT__) || defined(_MSC_VER) という式を考えたのですが、わかりやすい(後者を満たしている)とは思えません。 何かほかの定数や configure の結果などを使ってうまくできないものでしょうか。 -- ワナベ
Updated by wanabe (_ wanabe) almost 4 years ago
ワナベと申します。
2008/07/17 6:59 Usaku NAKAMURA <redmine@ruby-lang.org>:
> 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);
}
--
ワナベ
Updated by usa (Usaku NAKAMURA) over 3 years ago
こんにちは、なかむら(う)です。 なぜか反応が遅くなってしまいましたが、 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, <kbk@kt.rim.or.jp> 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 <usa@garbagecollect.jp>
Updated by usa (Usaku NAKAMURA) over 3 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r18871.