From: nobu.nakada@... Date: 2002-01-07T05:02:52+09:00 Subject: [ruby-dev:15646] Re: [PATCH] substitutes for str2cstr() なかだです。 At Sun, 6 Jan 2002 19:41:17 +0900, Nobuyoshi-Nakada wrote: > 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 19:25:32 @@ -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) (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) RSTRING(StringValue(v))->ptr +#define StringValueCstr(v, l) ((l) = RSTRING(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はできる。 中田 伸悦