X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=perl%2Fbio.xs;h=a9d32d84080a2df2fe3def7ccfcb4da2de0dc869;hp=3782d42062cf4acfee9a3cc1fadc088fffa99f93;hb=6f93539970fe8c07f7f68f7b2370f79abf78dcbb;hpb=7dfb0b774e6592dcbfe47015168a0ac8b44e2a17 diff --git a/perl/bio.xs b/perl/bio.xs index 3782d42062..a9d32d8408 100644 --- a/perl/bio.xs +++ b/perl/bio.xs @@ -25,7 +25,7 @@ int ret; SAVETMPS; PUSHMARK(sp); - XPUSHs(me); + XPUSHs(sv_2mortal(newSViv(me))); XPUSHs(sv_2mortal(newSViv(state))); XPUSHs(sv_2mortal(newSViv(cmd))); if ((state == BIO_CB_READ) || (state == BIO_CB_WRITE)) @@ -60,7 +60,8 @@ int ret; int boot_bio() { p5_bio_ex_bio_ptr= - BIO_get_ex_new_index(0,"SSLeay::BIO",ex_new,NULL,ex_cleanup); + BIO_get_ex_new_index(0,"SSLeay::BIO",ex_new,NULL, + ex_cleanup); p5_bio_ex_bio_callback= BIO_get_ex_new_index(0,"bio_callback",NULL,NULL, ex_cleanup); @@ -97,9 +98,8 @@ p5_BIO_new_buffer_ssl_connect(...) } EXTEND(sp,1); bio=BIO_new_buffer_ssl_connect(ctx); - arg=new_ref("SSLeay::BIO",(char *)bio,0); + arg=(SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); PUSHs(arg); - BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,(char *)arg); void p5_BIO_new_ssl_connect(...) @@ -124,9 +124,8 @@ p5_BIO_new_ssl_connect(...) } EXTEND(sp,1); bio=BIO_new_ssl_connect(ctx); - arg=new_ref("SSLeay::BIO",(char *)bio,0); + arg=(SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); PUSHs(arg); - BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,(char *)arg); void p5_BIO_new(...) @@ -154,16 +153,15 @@ p5_BIO_new(...) bio=BIO_new(BIO_f_buffer()); else croak("unknown BIO type"); - arg=new_ref("SSLeay::BIO",(char *)bio,0); + arg=(SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); PUSHs(arg); - BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,(char *)arg); int p5_BIO_hostname(bio,name) BIO *bio; char *name; CODE: - RETVAL=BIO_set_hostname(bio,name); + RETVAL=BIO_set_conn_hostname(bio,name); OUTPUT: RETVAL @@ -218,18 +216,20 @@ p5_BIO_pop(b) if (arg == NULL) { arg=new_ref("SSLeay::BIO",(char *)bio,0); - PUSHs(arg); BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,(char *)arg); + PUSHs(arg); } else { /* it was pushed in */ SvREFCNT_inc(arg); PUSHs(arg); +#if 0 /* This does not need to be done. */ if (bio->references < 1) abort(); /* decrement the reference count */ BIO_free(bio); +#endif } } @@ -253,7 +253,7 @@ p5_BIO_sysread(bio,in,num, ...) if (offset < 0) { if (-offset > olen) - croad("Offset outside string"); + croak("Offset outside string"); offset+=olen; } } @@ -356,8 +356,9 @@ p5_BIO_next_bio(b) if (arg == NULL) { arg=new_ref("SSLeay::BIO",(char *)bio,0); - PUSHs(arg); BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,(char *)arg); + bio->references++; + PUSHs(arg); } else { @@ -398,6 +399,7 @@ p5_BIO_set_callback(bio,cb,...) arg=sv_mortalcopy(ST(1)); SvREFCNT_inc(arg); BIO_set_ex_data(bio,p5_bio_ex_bio_callback,(char *)arg); + printf("%08lx < bio_ptr\n",BIO_get_ex_data(bio,p5_bio_ex_bio_ptr)); BIO_set_callback(bio,p5_bio_callback); void