X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-perl/blobdiff_plain/a24b5cfdde0be71a5bb2b85d94be3b93c7719e2a..fcd15e0b7a3d0f0ca2f30953573f8d1f6b8e8bd2:/keystuff.c diff --git a/keystuff.c b/keystuff.c index 6df6cec..beb9a74 100644 --- a/keystuff.c +++ b/keystuff.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: keystuff.c,v 1.2 2004/04/08 01:36:21 mdw Exp $ + * $Id$ * * Useful key-management functions * @@ -28,15 +28,35 @@ /*----- Header files ------------------------------------------------------*/ -/*----- Data structures ---------------------------------------------------*/ - -/*----- Static variables --------------------------------------------------*/ +#include "catacomb-perl.h" /*----- Main code ---------------------------------------------------------*/ -void warn_keyreporter(const char *file, int line, char *err, void *p) +void keyreport(const char *file, int line, const char *err, void *p) { - warn("%s:%i: keyfile error: %s", file, line, msg); + SV *sv = p; + dSP; + + if (!SvOK(sv)) + warn("%s:%i: keyfile error: %s", file, line, err); + else { + ENTER; SAVETMPS; + + PUSHMARK(SP); + XPUSHs(sv); + XPUSHs(sv_2mortal(newSVpv(file, 0))); + XPUSHs(sv_2mortal(newSViv(line))); + XPUSHs(sv_2mortal(newSVpv(err, 0))); + PUTBACK; + + call_method("report", G_DISCARD | G_EVAL | G_KEEPERR); + if (SvTRUE(ERRSV)) { + STRLEN len; + warn("reporter raised error (ignoring): %s", SvPV(ERRSV, len)); + } + + FREETMPS; LEAVE; + } } SV *keyerr(int rc) @@ -51,4 +71,15 @@ SV *keyerr(int rc) return (&PL_sv_undef); } +void keyfile_dec(Key_File *kf) +{ + kf->ref--; + if (!kf->ref) { + key_discard(&kf->kf); + DESTROY(kf); + } +} + + + /*----- That's all, folks -------------------------------------------------*/