summaryrefslogtreecommitdiffstats
path: root/perl
diff options
context:
space:
mode:
Diffstat (limited to 'perl')
-rw-r--r--perl/OpenSSL.xs41
-rw-r--r--perl/openssl_bio.xs10
-rw-r--r--perl/openssl_bn.xs12
-rw-r--r--perl/openssl_cipher.xs10
-rw-r--r--perl/openssl_digest.xs7
-rw-r--r--perl/openssl_ssl.xs12
6 files changed, 60 insertions, 32 deletions
diff --git a/perl/OpenSSL.xs b/perl/OpenSSL.xs
index 2267168b79..6ef66ccc1e 100644
--- a/perl/OpenSSL.xs
+++ b/perl/OpenSSL.xs
@@ -72,11 +72,38 @@ BOOT:
boot_digest();
boot_err();
boot_ssl();
- boot_OpenSSL__BN();
- boot_OpenSSL__BIO();
- boot_OpenSSL__Cipher();
- boot_OpenSSL__MD();
- boot_OpenSSL__ERR();
- boot_OpenSSL__SSL();
- boot_OpenSSL__X509();
+
+ /* */
+ /* The next macro is the completely correct way to call a C */
+ /* function that uses perl calling conventions but is not */
+ /* registered with perl. */
+ /* */
+ /* The second macro seems to work for this context. (We just */
+ /* need a mark for the called function since we don't have */
+ /* any local variables and what-not.) */
+ /* */
+ /* Unfortunately, we need to do this because these boot_* */
+ /* functions are auto-generated by xsubpp and are normally */
+ /* called from DyncLoader, but we're pulling them in here. */
+ /* */
+#define FULL_callBootFunc(func) { \
+ dSP; \
+ ENTER; \
+ SAVETMPS; \
+ PUSHMARK(SP); \
+ func(); \
+ FREETMPS; \
+ LEAVE; \
+ }
+#define callBootFunc(func) { \
+ PUSHMARK(SP); \
+ func(); \
+ }
+ callBootFunc(boot_OpenSSL__BN);
+ callBootFunc(boot_OpenSSL__BIO);
+ callBootFunc(boot_OpenSSL__Cipher);
+ callBootFunc(boot_OpenSSL__MD);
+ callBootFunc(boot_OpenSSL__ERR);
+ callBootFunc(boot_OpenSSL__SSL);
+ callBootFunc(boot_OpenSSL__X509);
diff --git a/perl/openssl_bio.xs b/perl/openssl_bio.xs
index 06d61af130..5628300d0b 100644
--- a/perl/openssl_bio.xs
+++ b/perl/openssl_bio.xs
@@ -32,7 +32,7 @@ p5_bio_callback(bio,state,parg,cmd,larg,ret)
if ((state == BIO_CB_READ) || (state == BIO_CB_WRITE))
XPUSHs(sv_2mortal(newSVpv(parg,larg)));
else
- XPUSHs(&sv_undef);
+ XPUSHs(&PL_sv_undef);
/* ptr one */
XPUSHs(sv_2mortal(newSViv(larg)));
XPUSHs(sv_2mortal(newSViv(ret)));
@@ -129,9 +129,9 @@ p5_BIO_new(...)
PPCODE:
pr_name("p5_BIO_new");
if ((items == 1) && SvPOK(ST(0)))
- type = SvPV(ST(0),na);
+ type = SvPV_nolen(ST(0));
else if ((items == 2) && SvPOK(ST(1)))
- type = SvPV(ST(1),na);
+ type = SvPV_nolen(ST(1));
else
croak("Usage: OpenSSL::BIO::new(type)");
EXTEND(sp,1);
@@ -314,7 +314,7 @@ p5_BIO_getline(bio)
PUSHs(sv_newmortal());
sv_setpvn(ST(0), "", 0);
SvGROW(ST(0), 1024);
- p=SvPV(ST(0), na);
+ p=SvPV_nolen(ST(0));
i = BIO_gets(bio, p, 1024);
if (i < 0)
i = 0;
@@ -370,7 +370,7 @@ p5_BIO_puts(bio, in)
PREINIT:
char *ptr;
CODE:
- ptr = SvPV(in,na);
+ ptr = SvPV_nolen(in);
RETVAL = BIO_puts(bio, ptr);
OUTPUT:
RETVAL
diff --git a/perl/openssl_bn.xs b/perl/openssl_bn.xs
index f79bf879e8..6817cfb740 100644
--- a/perl/openssl_bn.xs
+++ b/perl/openssl_bn.xs
@@ -142,7 +142,7 @@ p5_BN_bn2bin(a)
i=BN_num_bytes(a)+2;
sv_setpvn(ST(0),"",1);
SvGROW(ST(0),i+1);
- SvCUR_set(ST(0),BN_bn2bin(a,SvPV(ST(0),na)));
+ SvCUR_set(ST(0),BN_bn2bin(a,SvPV_nolen(ST(0))));
void
p5_BN_mpi2bn(a)
@@ -168,7 +168,7 @@ p5_BN_bn2mpi(a)
i=BN_bn2mpi(a,NULL);
sv_setpvn(ST(0),"",1);
SvGROW(ST(0),i+1);
- SvCUR_set(ST(0),BN_bn2mpi(a,SvPV(ST(0),na)));
+ SvCUR_set(ST(0),BN_bn2mpi(a,SvPV_nolen(ST(0))));
void
p5_BN_hex2bn(a)
@@ -208,9 +208,9 @@ p5_BN_bn2hex(a)
RETVAL=newSVpv("",0);
i=strlen(ptr);
SvGROW(RETVAL,i+1);
- memcpy(SvPV(RETVAL,na),ptr,i+1);
+ memcpy(SvPV_nolen(RETVAL),ptr,i+1);
SvCUR_set(RETVAL,i);
- Free(ptr);
+ OPENSSL_free(ptr);
OUTPUT:
RETVAL
@@ -226,9 +226,9 @@ p5_BN_bn2dec(a)
RETVAL=newSVpv("",0);
i=strlen(ptr);
SvGROW(RETVAL,i+1);
- memcpy(SvPV(RETVAL,na),ptr,i+1);
+ memcpy(SvPV_nolen(RETVAL),ptr,i+1);
SvCUR_set(RETVAL,i);
- Free(ptr);
+ OPENSSL_free(ptr);
OUTPUT:
RETVAL
diff --git a/perl/openssl_cipher.xs b/perl/openssl_cipher.xs
index e9ff2a8f79..580620ffbc 100644
--- a/perl/openssl_cipher.xs
+++ b/perl/openssl_cipher.xs
@@ -20,9 +20,9 @@ p5_EVP_C_new(...)
char *name;
PPCODE:
if ((items == 1) && SvPOK(ST(0)))
- name=SvPV(ST(0),na);
+ name=SvPV_nolen(ST(0));
else if ((items == 2) && SvPOK(ST(1)))
- name=SvPV(ST(1),na);
+ name=SvPV_nolen(ST(1));
else
croak("Usage: OpenSSL::Cipher::new(type)");
PUSHs(sv_newmortal());
@@ -112,7 +112,7 @@ p5_EVP_C_cipher(ctx,in)
CODE:
RETVAL=newSVpv("",0);
SvGROW(RETVAL,in.dsize+EVP_CIPHER_CTX_block_size(ctx)+1);
- EVP_Cipher(ctx,SvPV(RETVAL,na),in.dptr,in.dsize);
+ EVP_Cipher(ctx,SvPV_nolen(RETVAL),in.dptr,in.dsize);
SvCUR_set(RETVAL,in.dsize);
OUTPUT:
RETVAL
@@ -126,7 +126,7 @@ p5_EVP_C_update(ctx, in)
CODE:
RETVAL=newSVpv("",0);
SvGROW(RETVAL,in.dsize+EVP_CIPHER_CTX_block_size(ctx)+1);
- EVP_CipherUpdate(ctx,SvPV(RETVAL,na),&i,in.dptr,in.dsize);
+ EVP_CipherUpdate(ctx,SvPV_nolen(RETVAL),&i,in.dptr,in.dsize);
SvCUR_set(RETVAL,i);
OUTPUT:
RETVAL
@@ -139,7 +139,7 @@ p5_EVP_C_final(ctx)
CODE:
RETVAL=newSVpv("",0);
SvGROW(RETVAL,EVP_CIPHER_CTX_block_size(ctx)+1);
- if (!EVP_CipherFinal(ctx,SvPV(RETVAL,na),&i))
+ if (!EVP_CipherFinal(ctx,SvPV_nolen(RETVAL),&i))
sv_setpv(RETVAL,"BAD DECODE");
else
SvCUR_set(RETVAL,i);
diff --git a/perl/openssl_digest.xs b/perl/openssl_digest.xs
index 6cd3018e9f..4f2f8938cf 100644
--- a/perl/openssl_digest.xs
+++ b/perl/openssl_digest.xs
@@ -27,9 +27,9 @@ p5_EVP_MD_new(...)
char *name;
PPCODE:
if ((items == 1) && SvPOK(ST(0)))
- name=SvPV(ST(0),na);
+ name=SvPV_nolen(ST(0));
else if ((items == 2) && SvPOK(ST(1)))
- name=SvPV(ST(1),na);
+ name=SvPV_nolen(ST(1));
else
croak("Usage: OpenSSL::MD::new(type)");
PUSHs(sv_newmortal());
@@ -45,8 +45,9 @@ datum
p5_EVP_MD_name(ctx)
EVP_MD_CTX *ctx
CODE:
- RETVAL.dptr=OBJ_nid2ln(EVP_MD_type(EVP_MD_CTX_type(ctx)));
+ RETVAL.dptr=OBJ_nid2ln(EVP_MD_CTX_type(ctx));
RETVAL.dsize=strlen(RETVAL.dptr);
+
OUTPUT:
RETVAL
diff --git a/perl/openssl_ssl.xs b/perl/openssl_ssl.xs
index c7d1b171ab..146c1ace8e 100644
--- a/perl/openssl_ssl.xs
+++ b/perl/openssl_ssl.xs
@@ -72,9 +72,9 @@ p5_SSL_CTX_new(...)
PPCODE:
pr_name("p5_SSL_CTX_new");
if ((items == 1) && SvPOK(ST(0)))
- method=SvPV(ST(0),na);
+ method=SvPV_nolen(ST(0));
else if ((items == 2) && SvPOK(ST(1)))
- method=SvPV(ST(1),na);
+ method=SvPV_nolen(ST(1));
else
croak("Usage: OpenSSL::SSL::CTX::new(type)");
@@ -124,7 +124,7 @@ p5_SSL_CTX_use_PrivateKey_file(ctx,file,...)
croak("OpenSSL::SSL::CTX::use_PrivateKey_file(ssl_ctx,file[,type])");
if (items == 3)
{
- ptr=SvPV(ST(2),na);
+ ptr=SvPV_nolen(ST(2));
if (strcmp(ptr,"der") == 0)
i=SSL_FILETYPE_ASN1;
else
@@ -148,7 +148,7 @@ p5_SSL_CTX_set_options(ctx,...)
{
if (!SvPOK(ST(i)))
croak("Usage: OpenSSL::SSL_CTX::set_options(ssl_ctx[,option,value]+)");
- ptr=SvPV(ST(i),na);
+ ptr=SvPV_nolen(ST(i));
if (strcmp(ptr,"-info_callback") == 0)
{
SSL_CTX_set_info_callback(ctx,
@@ -325,7 +325,7 @@ p5_SSL_set_options(ssl,...)
{
if (!SvPOK(ST(i)))
croak("Usage: OpenSSL::SSL::set_options(ssl[,option,value]+)");
- ptr=SvPV(ST(i),na);
+ ptr=SvPV_nolen(ST(i));
if (strcmp(ptr,"-info_callback") == 0)
{
SSL_set_info_callback(ssl,
@@ -477,7 +477,7 @@ p5_BIO_get_ssl(bio)
ret=sv_mortalcopy(ret);
}
else
- ret= &sv_undef;
+ ret= &PL_sv_undef;
EXTEND(sp,1);
PUSHs(ret);