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, &params, 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, &params, 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 */