ext/pk11.c in pkcs11-0.2.7 vs ext/pk11.c in pkcs11-0.3.0
- old
+ new
@@ -37,15 +37,10 @@
#define PKCS11_DEFINE_METHOD(name, args) \
rb_define_method(cPKCS11, #name, pkcs11_##name, args);
VALUE pkcs11_return_value_to_class(CK_RV, VALUE);
-#if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
-extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
- rb_unblock_function_t *ubf, void *data2);
-#endif
-
static void
pkcs11_raise(VALUE self, CK_RV rv)
{
rb_funcall(self, rb_intern("vendor_raise_on_return_value"), 1, ULONG2NUM(rv));
rb_raise(ePKCS11Error, "method vendor_raise_on_return_value should never return");
@@ -65,26 +60,19 @@
if (!ctx->functions) rb_raise(ePKCS11Error, "no function list"); \
sval = (CK_##name)ctx->functions->name; \
if (!sval) rb_raise(ePKCS11Error, #name " is not supported."); \
}
-#ifdef HAVE_RB_THREAD_CALL_WITHOUT_GVL
- #define CallFunction(name, func, rv, ...) \
- { \
- struct tbr_##name##_params params = { \
- func, {__VA_ARGS__}, CKR_FUNCTION_FAILED \
- }; \
- rb_thread_call_without_gvl(tbf_##name, ¶ms, RUBY_UBF_PROCESS, NULL); \
- rv = params.retval; \
- }
+#define CallFunction(name, func, rv, ...) \
+{ \
+ struct tbr_##name##_params params = { \
+ func, {__VA_ARGS__}, CKR_FUNCTION_FAILED \
+ }; \
+ rb_thread_call_without_gvl(tbf_##name, ¶ms, RUBY_UBF_PROCESS, NULL); \
+ rv = params.retval; \
+}
-#else
- #define CallFunction(name, func, rv, ...) \
- rv = func(__VA_ARGS__)
-
-#endif
-
static void
pkcs11_ctx_unload_library(pkcs11_ctx *ctx)
{
#ifdef compile_for_windows
if(ctx->module) FreeLibrary(ctx->module);
@@ -1474,10 +1462,17 @@
case CKA_VALUE_BITS:
case CKA_VALUE_LEN:
if (attr->ulValueLen == sizeof(CK_ULONG))
return ULONG2NUM(*(CK_ULONG_PTR)(attr->pValue));
break;
+ case CKA_LABEL:
+ case CKA_APPLICATION:
+ case CKA_URL:
+ case CKA_CHAR_SETS:
+ case CKA_ENCODING_METHODS:
+ case CKA_MIME_TYPES:
+ return rb_enc_str_new(attr->pValue, attr->ulValueLen, rb_utf8_encoding());
}
return rb_str_new(attr->pValue, attr->ulValueLen);
}
///////////////////////////////////////
@@ -1542,11 +1537,11 @@
value = rb_obj_freeze(rb_str_new((char*)&ulong_val, sizeof(ulong_val)));
m->pParameter = RSTRING_PTR(value);
m->ulParameterLen = RSTRING_LEN(value);
break;
case T_DATA:
- m->pParameter = DATA_PTR(value);
m->ulParameterLen = NUM2LONG(rb_const_get(rb_funcall(value, rb_intern("class"), 0), rb_intern("SIZEOF_STRUCT")));
+ m->pParameter = DATA_PTR(value);
break;
default:
rb_raise(rb_eArgError, "invalid argument");
}
/* don't GC the value as long as this object is active */