diff options
author | Nobuyoshi Nakada <[email protected]> | 2024-06-07 11:06:53 +0900 |
---|---|---|
committer | git <[email protected]> | 2024-06-08 03:40:27 +0000 |
commit | 0619312bb53cb64dedbfbf30eafd3a708b72588e () | |
tree | 5f3189b451d1e906add7952fe99964d72f299d08 /ext/digest | |
parent | 0d91887c6aa740d3226407cafa1f27c62fd119f4 (diff) |
[ruby/digest] Use typed data in digest
https://.com/ruby/digest/commit/9a22f921c9
-rw-r--r-- | ext/digest/digest.c | 40 | ||||
-rw-r--r-- | ext/digest/digest.h | 18 |
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)); } |