- 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;
+ }