99 */
1010#include "ossl.h"
1111
12- #define NewSPKI (klass ) \
13- TypedData_Wrap_Struct((klass), &ossl_netscape_spki_type, 0)
14- #define SetSPKI (obj , spki ) do { \
15- if (!(spki)) { \
16- ossl_raise(rb_eRuntimeError, "SPKI wasn't initialized!"); \
17- } \
18- RTYPEDDATA_DATA(obj) = (spki); \
19- } while (0)
2012#define GetSPKI (obj , spki ) do { \
2113 TypedData_Get_Struct((obj), NETSCAPE_SPKI, &ossl_netscape_spki_type, (spki)); \
2214 if (!(spki)) { \
@@ -56,16 +48,7 @@ static const rb_data_type_t ossl_netscape_spki_type = {
5648static VALUE
5749ossl_spki_alloc (VALUE klass )
5850{
59- NETSCAPE_SPKI * spki ;
60- VALUE obj ;
61-
62- obj = NewSPKI (klass );
63- if (!(spki = NETSCAPE_SPKI_new ())) {
64- ossl_raise (eSPKIError , NULL );
65- }
66- SetSPKI (obj , spki );
67-
68- return obj ;
51+ return TypedData_Wrap_Struct (klass , & ossl_netscape_spki_type , 0 );
6952}
7053
7154/*
@@ -82,7 +65,13 @@ ossl_spki_initialize(int argc, VALUE *argv, VALUE self)
8265 VALUE buffer ;
8366 const unsigned char * p ;
8467
85- if (rb_scan_args (argc , argv , "01" , & buffer ) == 0 ) {
68+ rb_scan_args (argc , argv , "01" , & buffer );
69+ ossl_want_uninitialized (self , & ossl_netscape_spki_type );
70+ if (argc == 0 ) {
71+ spki = NETSCAPE_SPKI_new ();
72+ if (!spki )
73+ ossl_raise (eSPKIError , "NETSCAPE_SPKI_new" );
74+ RTYPEDDATA_DATA (self ) = spki ;
8675 return self ;
8776 }
8877 StringValue (buffer );
@@ -93,8 +82,7 @@ ossl_spki_initialize(int argc, VALUE *argv, VALUE self)
9382 ossl_raise (eSPKIError , NULL );
9483 }
9584 }
96- NETSCAPE_SPKI_free (DATA_PTR (self ));
97- SetSPKI (self , spki );
85+ RTYPEDDATA_DATA (self ) = spki ;
9886
9987 return self ;
10088}
0 commit comments