なかだです。

うえのさんのzlibを見て思ったのですが、1.6から1.7(1.8?)への移行
には、やはり今のStringValue関連だけでは不便な気がします。
StringValueCstr()というのはいい名前が思いつかなかったんですが。
こういうのはどうでしょうか。


Index: ruby.h =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.h,v retrieving revision 1.57 diff -u -2 -p -r1.57 ruby.h --- ruby.h 2001/12/21 07:20:23 1.57 +++ ruby.h 2002/01/06 10:34:57 @@ -202,11 +202,9 @@ VALUE rb_str_to_str _((VALUE)); VALUE rb_string_value _((volatile VALUE*)); -#define StringValue(v) if (TYPE(v) != T_STRING) rb_string_value(&(v)) +#define StringValue(v) RSTRING((TYPE(v) == T_STRING) ? (v) : rb_string_value(&(v))) void rb_check_safe_str _((VALUE)); -#define SafeStringValue(v) do {\ - StringValue(v);\ - rb_check_safe_str(v);\ -} while (0) -#define StringValuePtr(v) RSTRING((TYPE(v) == T_STRING) ? (v) : rb_string_value(&(v)))->ptr +#define SafeStringValue(v) rb_check_safe_str(StringValue(v)) +#define StringValuePtr(v) StringValue(v)->ptr +#define StringValueCstr(v, l) ((l) = StringValue(v)->len, RSTRING(v)->ptr) /* obsolete macro - use SafeStringValue(v) */ #define Check_SafeStr(v) rb_check_safe_str((VALUE)(v)) @@ -242,4 +240,5 @@ char *rb_str2cstr _((VALUE,int*)); /* obsolete API - use StringValuePtr() */ #define STR2CSTR(x) rb_str2cstr((VALUE)(x),0) +#define str2cstr(x,l) StringValueCstr((x), *(l)) #define NUM2CHR(x) (((TYPE(x) == T_STRING)&&(RSTRING(x)->len>=1))?\
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦