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)); \
}