ext/pk11_struct_macros.h in pkcs11-0.2.7 vs ext/pk11_struct_macros.h in pkcs11-0.3.0

- old
+ new

@@ -17,14 +17,14 @@ } return NUM2ULONG(rb_to_int(val)); } static VALUE -get_string(VALUE obj, off_t offset, size_t size) +get_string(VALUE obj, off_t offset, size_t size, rb_encoding *enc) { char *ptr = (char*)DATA_PTR(obj); - return rb_str_new(ptr+offset, size); + return rb_enc_str_new(ptr+offset, size, enc); } static VALUE set_string(VALUE obj, VALUE value, off_t offset, size_t size) { @@ -84,11 +84,11 @@ if (NIL_P(value)){ rb_iv_set(obj, name, value); *ptr = NULL_PTR; return value; } - new_obj = Data_Make_Struct(rb_cInteger, CK_ULONG, 0, free, *ptr); + new_obj = Data_Make_Struct(rb_cData, CK_ULONG, 0, -1, *ptr); rb_iv_set(obj, name, new_obj); **ptr = NUM2ULONG(value); return value; } @@ -124,16 +124,16 @@ else rb_raise(rb_eArgError, "arg must be true or false"); return value; } static VALUE -get_string_ptr(VALUE obj, const char *name, off_t offset) +get_string_ptr(VALUE obj, const char *name, off_t offset, rb_encoding *enc) { char *ptr = (char*)DATA_PTR(obj); char *p = *(char**)(ptr+offset); if (!p) return Qnil; - return rb_str_new2(p); + return rb_enc_str_new_cstr(p, enc); } static VALUE set_string_ptr(VALUE obj, VALUE value, const char *name, off_t offset) { @@ -149,18 +149,18 @@ *(CK_VOID_PTR*)(ptr+offset) = RSTRING_PTR(value); return value; } static VALUE -get_string_ptr_len(VALUE obj, const char *name, off_t offset, off_t offset_len) +get_string_ptr_len(VALUE obj, const char *name, off_t offset, off_t offset_len, rb_encoding *enc) { unsigned long l; char *ptr = (char*)DATA_PTR(obj); char *p = *(char**)(ptr+offset); if (!p) return Qnil; l = *(unsigned long*)(ptr+offset_len); - return rb_str_new(p, l); + return rb_enc_str_new(p, l, enc); } static VALUE set_string_ptr_len(VALUE obj, VALUE value, const char *name, off_t offset, off_t offset_len) { @@ -288,13 +288,13 @@ #define PKCS11_IMPLEMENT_STRUCT_WITH_ALLOCATOR(s) \ static VALUE c##s;\ static VALUE a##s##_members;\ PKCS11_IMPLEMENT_ALLOCATOR(s); -#define PKCS11_IMPLEMENT_STRING_ACCESSOR(s, f) \ +#define PKCS11_IMPLEMENT_STRING_ACCESSOR(s, f, enco) \ static VALUE c##s##_get_##f(VALUE o){ \ - return get_string(o, OFFSET_OF(s, f), SIZE_OF(s, f)); \ + return get_string(o, OFFSET_OF(s, f), SIZE_OF(s, f), rb_##enco##_encoding()); \ } \ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \ return set_string(o, v, OFFSET_OF(s, f), SIZE_OF(s, f)); \ } @@ -336,20 +336,20 @@ } \ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \ return set_bool(o, v, OFFSET_OF(s, f)); \ } -#define PKCS11_IMPLEMENT_STRING_PTR_ACCESSOR(s, f) \ +#define PKCS11_IMPLEMENT_STRING_PTR_ACCESSOR(s, f, enco) \ static VALUE c##s##_get_##f(VALUE o){ \ - return get_string_ptr(o, #f, OFFSET_OF(s, f)); \ + return get_string_ptr(o, #f, OFFSET_OF(s, f), rb_##enco##_encoding()); \ } \ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \ return set_string_ptr(o, v, #f, OFFSET_OF(s, f)); \ } -#define PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(s, f, l) \ +#define PKCS11_IMPLEMENT_STRING_PTR_LEN_ACCESSOR(s, f, l, enco) \ static VALUE c##s##_get_##f(VALUE o){ \ - return get_string_ptr_len(o, #f, OFFSET_OF(s, f), OFFSET_OF(s, l)); \ + return get_string_ptr_len(o, #f, OFFSET_OF(s, f), OFFSET_OF(s, l), rb_##enco##_encoding()); \ } \ static VALUE c##s##_set_##f(VALUE o, VALUE v){ \ return set_string_ptr_len(o, v, #f, OFFSET_OF(s, f), OFFSET_OF(s, l)); \ }