void wineXmlCallbackLog(char const* caller, xmlErrorLevel lvl, char const* msg, va_list ap) { static const int max_size = 200; enum __wine_debug_class dbcl; char buff[max_size]; int len; switch (lvl) { case XML_ERR_NONE: dbcl = __WINE_DBCL_TRACE; break; case XML_ERR_WARNING: dbcl = __WINE_DBCL_WARN; break; default: dbcl = __WINE_DBCL_ERR; break; } len = vsnprintf(buff, max_size, msg, ap); if (len == -1 || len >= max_size) buff[max_size-1] = 0; wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, "%s", buff); }
void wineXmlCallbackLog(char const* caller, xmlErrorLevel lvl, char const* msg, va_list ap) { char* buf = NULL; int len = 32, needed; enum __wine_debug_class dbcl = __WINE_DBCL_ERR; switch (lvl) { case XML_ERR_NONE: dbcl = __WINE_DBCL_TRACE; break; case XML_ERR_WARNING: dbcl = __WINE_DBCL_WARN; break; default: break; } do { heap_free(buf); buf = heap_alloc(len); needed = vsnprintf(buf, len, msg, ap); if (needed == -1) len *= 2; else if (needed >= len) len = needed + 1; else needed = 0; } while (needed); wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, "%s", buf); heap_free(buf); }
void wineXmlCallbackError(char const* caller, xmlErrorPtr err) { enum __wine_debug_class dbcl; switch (err->level) { case XML_ERR_NONE: dbcl = __WINE_DBCL_TRACE; break; case XML_ERR_WARNING: dbcl = __WINE_DBCL_WARN; break; default: dbcl = __WINE_DBCL_ERR; break; } wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, "error code %d", err->code); if (err->message) wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, ": %s", err->message); else wine_dbg_log(dbcl, &__wine_dbch_msxml, caller, "\n"); }