summaryrefslogtreecommitdiff
path: root/ext/digest
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-06-07 11:06:53 +0900
committergit <[email protected]>2024-06-08 03:40:27 +0000
commit0619312bb53cb64dedbfbf30eafd3a708b72588e ()
tree5f3189b451d1e906add7952fe99964d72f299d08 /ext/digest
parent0d91887c6aa740d3226407cafa1f27c62fd119f4 (diff)
[ruby/digest] Use typed data in digest
https://.com/ruby/digest/commit/9a22f921c9
-rw-r--r--ext/digest/digest.c40
-rw-r--r--ext/digest/digest.h18
2 files changed, 50 insertions, 8 deletions
@@ -537,6 +537,36 @@ rb_digest_class_init(VALUE self)
* Data_Wrap_Struct(0, 0, 0, (void *)&sha1));
*/
static rb_digest_metadata_t *
get_digest_base_metadata(VALUE klass)
{
@@ -554,8 +584,8 @@ get_digest_base_metadata(VALUE klass)
if (NIL_P(p))
rb_raise(rb_eRuntimeError, "Digest::Base cannot be directly inherited in Ruby");
- if (!RB_TYPE_P(obj, T_DATA) || RTYPEDDATA_P(obj)) {
- wrong:
if (p == klass)
rb_raise(rb_eTypeError, "%"PRIsVALUE"::metadata is not initialized properly",
klass);
@@ -564,12 +594,6 @@ get_digest_base_metadata(VALUE klass)
klass, p);
}
-#undef RUBY_UNTYPED_DATA_WARNING
-#define RUBY_UNTYPED_DATA_WARNING 0
- Data_Get_Struct(obj, rb_digest_metadata_t, algo);
-
- if (!algo) goto wrong;
-
switch (algo->api_version) {
case 3:
break;
@@ -64,10 +64,28 @@ rb_id_metadata(void)
return rb_intern_const("metadata");
}
static inline VALUE
rb_digest_make_metadata(const rb_digest_metadata_t *meta)
{
#undef RUBY_UNTYPED_DATA_WARNING
#define RUBY_UNTYPED_DATA_WARNING 0
return rb_obj_freeze(Data_Wrap_Struct(0, 0, 0, (void *)meta));
}