about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedxml2.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-13 19:12:13 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-13 19:12:13 +0200
commit5287e42b028314b2e5fb2a8e9d8fad604ad8fb28 (patch)
treebf5b479c73e0a9a12488b1ffa8dbc213a6a378d8 /src/wrapped/wrappedxml2.c
parente0a7f775c98550edf8ef4b1d1c5eab77da98bc13 (diff)
downloadbox64-5287e42b028314b2e5fb2a8e9d8fad604ad8fb28.tar.gz
box64-5287e42b028314b2e5fb2a8e9d8fad604ad8fb28.zip
Added some xml2 wrapped functions (for #44)
Diffstat (limited to 'src/wrapped/wrappedxml2.c')
-rwxr-xr-xsrc/wrapped/wrappedxml2.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/wrapped/wrappedxml2.c b/src/wrapped/wrappedxml2.c
index 5c1e07fa..59381544 100755
--- a/src/wrapped/wrappedxml2.c
+++ b/src/wrapped/wrappedxml2.c
@@ -44,6 +44,7 @@ typedef int     (*iFppppp_t)    (void*, void*, void*, void*, void*);
 typedef void    (*vFppppp_t)    (void*, void*, void*, void*, void*);
 typedef int     (*iFpppppp_t)   (void*, void*, void*, void*, void*, void*);
 typedef void    (*vFpppppp_t)   (void*, void*, void*, void*, void*, void*);
+typedef void*   (*pFpppppi_t)   (void*, void*, void*, void*, void*, int);
 
 #define SUPER()                                     \
     GO(xmlHashCopy, pFpp_t)                         \
@@ -72,6 +73,7 @@ typedef void    (*vFpppppp_t)   (void*, void*, void*, void*, void*, void*);
     GO(xmlParserInputBufferCreateIO, pFpppi_t)      \
     GO(xmlInitMemory, iFv_t)                        \
     GO(xmlParseDocument, iFp_t)                     \
+    GO(xmlCreateIOParserCtxt, pFpppppi_t)           \
 
 EXPORT uintptr_t my_xmlFree = 0;
 EXPORT uintptr_t my_xmlMalloc = 0;
@@ -1415,6 +1417,18 @@ EXPORT int my_xmlParseDocument(x64emu_t* emu, my_xmlSAXHandler_t** p)
     return ret;
 }
 
+EXPORT void* my_xmlCreateIOParserCtxt(x64emu_t* emu, my_xmlSAXHandler_t** p, void* user_data, void* ioread, void* ioclose, void* ioctx, int enc)
+{
+    xml2_my_t* my = (xml2_my_t*)my_lib->priv.w.p2;
+    // handling of wine that change the default sax handler of...
+    my_xmlSAXHandler_t* old_saxhandler = p?(*p):NULL;
+    my_xmlSAXHandler_t sax_handler = {0};
+    wrapSaxHandler(&sax_handler, old_saxhandler);
+    void* ret = my->xmlCreateIOParserCtxt(p, user_data, find_xmlInputReadCallback_Fct(ioread), find_xmlInputCloseCallback_Fct(ioclose), ioctx, enc);
+    restoreSaxHandler(&sax_handler, old_saxhandler);
+    return ret;
+}
+
 #define CUSTOM_INIT \
     lib->priv.w.p2 = getXml2My(lib);    \
     my_lib = lib;