
On Fri, 2008-08-08 at 16:22 +0200, Chris Lalancette wrote:
Jim Meyering wrote:
diff -r c6a3e36cdf54 ext/libvirt/_libvirt.c --- a/ext/libvirt/_libvirt.c Thu Jul 17 15:24:26 2008 -0700 +++ b/ext/libvirt/_libvirt.c Fri Aug 08 06:04:56 2008 -0400 @@ -637,16 +637,51 @@ VALUE libvirt_conn_num_of_defined_storag } #endif
+static char *get_string_or_nil(VALUE arg) +{ + if (TYPE(arg) == T_NIL) + return NULL; + else if (TYPE(arg) == T_STRING) + return STR2CSTR(arg);
STR2CSTR is marked as obsolete in ruby.h, where it says to use StringValuePtr instead:
/* obsolete API - use StringValuePtr() */ #define STR2CSTR(x) rb_str2cstr((VALUE)(x),0)
Yeah, you are right. I looked through the ruby source code, actually, and I ended up using StringValueCStr (which is used elsewhere in the ruby-libvirt bindings). It's basically the same as StringValuePtr, but does an additional check to make sure the string is not of 0 length and that there aren't additional embedded \0 in the string.
I also updated the patch with the const pointers as you suggested. Attached. Thanks for the review!
ACK .. committed. I'll try and roll a new release tomorrow. David