static void verror_handler(int erno,va_list ap) { if(erno&ERBIT_RNL) { rnl_default_verror_handler(erno&~ERBIT_RNL,ap); } else { int line=XML_GetCurrentLineNumber(expat),col=XML_GetCurrentColumnNumber(expat); if(line!=lastline||col!=lastcol) { lastline=line; lastcol=col; if(xgfile) (*er_printf)("%s:%s: error: ",xgfile,xgpos); else (*er_printf)("%s:%i:%i: error: ",xml,line,col); if(erno&ERBIT_RNV) { rnv_default_verror_handler(erno&~ERBIT_RNV,ap); if(nexp) { int req=2, i=0; char *s; while(req--) { rnx_expected(previous,req); if(i==rnx_n_exp) continue; if(rnx_n_exp>nexp) break; (*er_printf)((char*)(req?"required:\n":"allowed:\n")); for(;i!=rnx_n_exp;++i) { (*er_printf)("\t%s\n",s=rnx_p2str(rnx_exp[i])); m_free(s); } } } } else { switch(erno) { case XCL_ER_IO: err("%s"); break; case XCL_ER_XML: err("%s"); break; case XCL_ER_XENT: err("pipe through xx to expand external entities"); break; default: assert(0); } } } } }
static void silent_verror_handler(int erno,va_list ap) { if(erno&ERBIT_DRV) rnv_default_verror_handler(erno,ap); /* low-level diagnostics */ }
static void verror_handler(int erno,va_list ap) { lasterr=erno; rnv_default_verror_handler(erno&~ERBIT_RNV,ap); }