📄 xmlparserwarning_chdl.c
字号:
#include <libxml/xmlerror.h>
#include <ch.h>
#define XML_GET_VAR_STR_VA(msg, str, ap_c) { \
int size; \
int chars; \
char *larger; \
\
str = (char *) xmlMalloc(150); \
if (str != NULL) { \
size = 150; \
while (1) { \
chars = vsnprintf(str, size, msg, ap_c); \
if ((chars > -1) && (chars < size)) \
break; \
if (chars > -1) \
size += chars + 1; \
else \
size += 100; \
if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
break; \
} \
str = larger; \
} \
} \
}
/**
* xmlParserVWarning:
* @ctx: an XML parser context
* @msg: the message to display/transmit
* @...: extra parameters for the message display
*
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
void
xmlParserVWarning(void *ctx, const char *msg, va_list ap_c)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlParserInputPtr input = NULL;
xmlParserInputPtr cur = NULL;
char * str;
if (ctxt != NULL) {
input = ctxt->input;
if ((input != NULL) && (input->filename == NULL) &&
(ctxt->inputNr > 1)) {
cur = input;
input = ctxt->inputTab[ctxt->inputNr - 2];
}
xmlParserPrintFileInfo(input);
}
xmlGenericError(xmlGenericErrorContext, "warning: ");
XML_GET_VAR_STR_VA(msg, str, ap_c);
xmlGenericError(xmlGenericErrorContext, "%s", str);
if (str != NULL)
xmlFree(str);
if (ctxt != NULL) {
xmlParserPrintFileContext(input);
if (cur != NULL) {
xmlParserPrintFileInfo(cur);
xmlGenericError(xmlGenericErrorContext, "\n");
xmlParserPrintFileContext(cur);
}
}
}
EXPORTCH void xmlParserWarning_chdl(void *varg) {
ChInterp_t interp;
va_list ap;
void *ctx;
char *msg;
va_list ap_ch, ap_c;
void *memhandle;
Ch_VaStart(interp, ap, varg);
ctx = Ch_VaArg(interp, ap, void *);
msg = Ch_VaArg(interp, ap, char *);
ap_ch = Ch_VaArg(interp, ap, va_list);
ap_c = Ch_VaVarArgsCreate(interp, ap_ch, &memhandle);
xmlParserVWarning(ctx, msg, ap_c);
Ch_VaVarArgsDelete(interp, memhandle);
Ch_VaEnd(interp, ap);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -