/* -*-c-*-
*
- * $Id: keystuff.c,v 1.2 2004/04/08 01:36:21 mdw Exp $
+ * $Id$
*
* Useful key-management functions
*
/*----- 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)
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 -------------------------------------------------*/