void xsltTransformErrorTrampoline(xsltTransformContextPtr context, xsltStylesheetPtr style, xmlNodePtr node, const char* message, ...) { va_list args; va_start(args, message); va_list preflightArgs; va_copy(preflightArgs, args); size_t stringLength = vsnprintf(nullptr, 0, message, preflightArgs); va_end(preflightArgs); Vector<char, 1024> buffer(stringLength + 1); vsnprintf(buffer.data(), stringLength + 1, message, args); va_end(args); static void (*xsltTransformErrorPointer)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...) WTF_ATTRIBUTE_PRINTF(4, 5) = reinterpret_cast<void (*)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...)>(dlsym(libxsltLibrary(), "xsltTransformError")); xsltTransformErrorPointer(context, style, node, "%s", buffer.data()); }
void xsltTransformErrorTrampoline(xsltTransformContextPtr context, xsltStylesheetPtr style, xmlNodePtr node, const char* message, ...) { va_list args; va_start(args, message); char* messageWithArgs; vasprintf(&messageWithArgs, message, args); va_end(args); static void (*xsltTransformErrorPointer)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...) WTF_ATTRIBUTE_PRINTF(4, 5) = reinterpret_cast<void (*)(xsltTransformContextPtr, xsltStylesheetPtr, xmlNodePtr, const char*, ...)>(dlsym(libxsltLibrary(), "xsltTransformError")); xsltTransformErrorPointer(context, style, node, "%s", messageWithArgs); free(messageWithArgs); }