123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- ** OpenSSL.xs
- */
- #include "openssl.h"
- SV *
- new_ref(type, obj, mort)
- char *type;
- char *obj;
- {
- SV *ret;
- if (mort)
- ret = sv_newmortal();
- else
- ret = newSViv(0);
- #ifdef DEBUG
- printf(">new_ref %d\n",type);
- #endif
- sv_setref_pv(ret, type, (void *)obj);
- return(ret);
- }
- int
- ex_new(obj, data, ad, idx, argl, argp)
- char *obj;
- SV *data;
- CRYPTO_EX_DATA *ad;
- int idx;
- long argl;
- char *argp;
- {
- SV *sv;
- #ifdef DEBUG
- printf("ex_new %08X %s\n",obj,argp);
- #endif
- sv = sv_newmortal();
- sv_setref_pv(sv, argp, (void *)obj);
- #ifdef DEBUG
- printf("%d>new_ref '%s'\n", sv, argp);
- #endif
- CRYPTO_set_ex_data(ad, idx, (char *)sv);
- return(1);
- }
- void
- ex_cleanup(obj, data, ad, idx, argl, argp)
- char *obj;
- SV *data;
- CRYPTO_EX_DATA *ad;
- int idx;
- long argl;
- char *argp;
- {
- pr_name("ex_cleanup");
- #ifdef DEBUG
- printf("ex_cleanup %08X %s\n", obj, argp);
- #endif
- if (data != NULL)
- SvREFCNT_dec((SV *)data);
- }
- MODULE = OpenSSL PACKAGE = OpenSSL
- PROTOTYPES: ENABLE
- BOOT:
- boot_bio();
- boot_cipher();
- boot_digest();
- boot_err();
- boot_ssl();
- /* */
- /* 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);
|