/* -*-c-*-
*
- * $Id: keystuff.c,v 1.1 2004/04/02 18:04:01 mdw Exp $
+ * $Id$
*
* Useful key-management functions
*
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: keystuff.c,v $
- * Revision 1.1 2004/04/02 18:04:01 mdw
- * Initial checkin.
- *
- */
-
/*----- 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 -------------------------------------------------*/