From: "たむらけんいち" Date: 2003-03-13T01:11:48+09:00 Subject: [ruby-dev:19815] Re: RSTRING(str)->ptr たむらです。 On Thu, 13 Mar 2003 00:50:21 +0900 nobu.nakada@nifty.ne.jp wrote: > At Thu, 13 Mar 2003 00:39:36 +0900, > NISHIKAWA wrote: > > > STR2CSTR()に相当するのはStringValuePtr()です。これなら非NULLを > > > 返します。 > > > > StringValueやStringValuePtrは1.6.8には見あたりませんでした。 > > ちょっとその辺を勘案しつつ対処します。ありがとうございました > > > StringValuePtr()はptrを必ず非NULLにしてしまうのが問題になるケー > スもあるかも知れません。 > > > #後々の切り替えを考えて自前マクロ作るかなあ... > > とりあえずこれでいいのでは。 > > #ifndef StringValuePtr > #define StringValuePtr(s) STR2CSTR(s) > #endif なかださんの 昔の stringio.c と ruby-1.8.0 の ruby.h から以下のヘッダを 作って Ruby/JS では include してます。 % cat shim16to18.h (Thu 13 1:08AM) /* copy & paste from stringio.c */ /* Don't use for expressions have side effect */ #ifndef RB_STRING_VALUE #define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s))) #endif #ifndef StringValue #define StringValue(s) RB_STRING_VALUE(s) #endif #ifndef StringValuePtr #define StringValuePtr(s) RSTRING(RB_STRING_VALUE(s))->ptr #endif #ifndef StringValueLen #define StringValueLen(s) RSTRING(RB_STRING_VALUE(s))->len #endif /* copy & paste from ruby-1.8.0/ruby.h */ #define SafeStringValue(v) do {\ StringValue(v);\ rb_check_safe_str(v);\ } while (0) # 添削希望 -- たむら (http://www.rubyist.net/~tamura/d/)