[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20256] broken snprintf

From: "U.Nakamura" <usa@...>
Date: 2003-05-21 04:14:40 UTC
List: ruby-dev #20256
こんにちは、なかむら(う)です。

[ruby-talk:69672]から始まって、[ruby-dev:20029]に繋がって、
[ruby-win32:549]に行ってた話題ですが、またdevに戻ってきました。
# 行ったり来たりでごめんなさい。

ruby-win32に投げたまとめを再掲すると、

背景:
win32 native版の_snprintf(_vsnprintf)は、C99のsnprintfと仕様
が異なり、結果出力バッファ末尾に'\0'が格納される保証がない。

現状:
一箇所だけ対応コードを入れてあるが、あまりにも場当たり的。

解決案:
(1) そもそもどんなプラットフォームにおいても、snprintfがC99と
    互換であることは期待できないので、configureで判定し、C99
    非互換であればmissing/vsnprintf.cを利用すべきだ。
(2) win32/win32.c内にrb_w32_snprintf, rb_w32_vsnprintfを実装
    して回避する。

解決案に対する問題:
(1) 実際にC99非互換のsnprintfはwin32 native版くらいしか見つか
    らないので、configureで判定するまでもない。
    さらに、現状のmissing/vsnprintf.cは浮動小数点数に対応して
    いない。
(2) ほんとにWindowsだけでいいの?

という話です。


これに対し、[ruby-win32:552]で、わたなべさんが、

| > | (3) '\0'で終端しないsnprintfなら、snprintfを呼び出して'\0'
| > |     で終端させるようなwrapperを用意する。
| > | 
| > | というのもありそうですが、実は(2)ってそんな感じ?
| > 
| > (2)はそういうことです。
| 
| であればWIN32に限る必要もないわけで、(1)と(2)を合わせて、
|   o snprintfがなければmissing/vsnprintf.cを使う
|   o snprintfがC99非互換('\0'で終端しない)ならwrapperを使う
| とすればよさそうです。

とおっしゃったので、話が再びWin32限定じゃなくなったということ
で戻ってきました。

なお、私自身はこのわたなべさんの提案に賛成ですが、どないなも
んでしょうか?


それでは
-- 
U.Nakamura <usa@osb.att.ne.jp>



In This Thread

Prev Next