From: <vac...@us...> - 2009-06-02 16:42:52
|
Revision: 150 http://xmlwrapp.svn.sourceforge.net/xmlwrapp/?rev=150&view=rev Author: vaclavslavik Date: 2009-06-02 16:42:51 +0000 (Tue, 02 Jun 2009) Log Message: ----------- make extern "C" callback functions static so that they are not exported as globally visible symbols Modified Paths: -------------- trunk/src/libxml/dtd_impl.cxx trunk/src/libxml/event_parser.cxx trunk/src/libxml/init.cxx trunk/src/libxml/tree_parser.cxx trunk/src/libxslt/init.cxx trunk/src/libxslt/stylesheet.cxx Modified: trunk/src/libxml/dtd_impl.cxx =================================================================== --- trunk/src/libxml/dtd_impl.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxml/dtd_impl.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -51,10 +51,24 @@ using namespace xml::impl; //#################################################################### -namespace { - extern "C" void dtd_error (void *ctxt, const char *message, ...); - extern "C" void dtd_warning (void *ctxt, const char*, ...); -} // end anonymous namespace +extern "C" +{ + //#################################################################### + static void dtd_error (void *ctxt, const char *message, ...) { + dtd_impl *dtd = static_cast<dtd_impl*>(ctxt); + + va_list ap; + va_start(ap, message); + printf2string(dtd->error_, message, ap); + va_end(ap); + } + //#################################################################### + static void dtd_warning (void *ctxt, const char*, ...) { + dtd_impl *dtd = static_cast<dtd_impl*>(ctxt); + ++dtd->warnings_; + } + //#################################################################### +} //#################################################################### dtd_impl::dtd_impl (const char *filename) : warnings_(0), dtd_(0) { if ( (dtd_ = xmlParseDTD(0, reinterpret_cast<const xmlChar*>(filename))) == 0) { @@ -89,22 +103,3 @@ dtd_ = 0; return xmldtd; } -//#################################################################### -namespace { - //#################################################################### - extern "C" void dtd_error (void *ctxt, const char *message, ...) { - dtd_impl *dtd = static_cast<dtd_impl*>(ctxt); - - va_list ap; - va_start(ap, message); - printf2string(dtd->error_, message, ap); - va_end(ap); - } - //#################################################################### - extern "C" void dtd_warning (void *ctxt, const char*, ...) { - dtd_impl *dtd = static_cast<dtd_impl*>(ctxt); - ++dtd->warnings_; - } - //#################################################################### -} -//#################################################################### Modified: trunk/src/libxml/event_parser.cxx =================================================================== --- trunk/src/libxml/event_parser.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxml/event_parser.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -70,18 +70,8 @@ //#################################################################### namespace { const std::size_t const_buffer_size = 4096; +} - extern "C" xmlEntityPtr cb_get_entity (void *, const xmlChar *name); - extern "C" void cb_start_element (void *parser, const xmlChar *tag, const xmlChar **props); - extern "C" void cb_end_element (void *parser, const xmlChar *tag); - extern "C" void cb_text (void *parser, const xmlChar *text, int length); - extern "C" void cb_pi (void *parser, const xmlChar *target, const xmlChar *data); - extern "C" void cb_comment (void *parser, const xmlChar *text); - extern "C" void cb_cdata (void *parser, const xmlChar *text, int length); - extern "C" void cb_warning (void *parser, const char *message, ...); - extern "C" void cb_error (void *parser, const char *message, ...); - extern "C" void cb_ignore (void*, const xmlChar*, int); -} // end anonymous namespace //#################################################################### struct xml::impl::epimpl { public: @@ -107,6 +97,55 @@ epimpl (const epimpl&); epimpl& operator= (const epimpl&); }; + +extern "C" +{ + //#################################################################### + static void cb_start_element (void *parser, const xmlChar *tag, const xmlChar **props) + { static_cast<epimpl*>(parser)->event_start_element(tag, props); } + //#################################################################### + static void cb_end_element (void *parser, const xmlChar *tag) + { static_cast<epimpl*>(parser)->event_end_element(tag); } + //#################################################################### + static void cb_text (void *parser, const xmlChar *text, int length) + { static_cast<epimpl*>(parser)->event_text(text, length); } + //#################################################################### + static void cb_pi (void *parser, const xmlChar *target, const xmlChar *data) + { static_cast<epimpl*>(parser)->event_pi(target, data); } + //#################################################################### + static void cb_comment (void *parser, const xmlChar *text) + { static_cast<epimpl*>(parser)->event_comment(text); } + //#################################################################### + static void cb_cdata (void *parser, const xmlChar *text, int length) + { static_cast<epimpl*>(parser)->event_cdata(text, length); } + //#################################################################### + static void cb_warning (void *parser, const char *message, ...) { + std::string complete_message; + + va_list ap; + va_start(ap, message); + printf2string(complete_message, message, ap); + va_end(ap); + + static_cast<epimpl*>(parser)->event_warning(complete_message); + } + //#################################################################### + static void cb_error (void *parser, const char *message, ...) { + std::string complete_message; + + va_list ap; + va_start(ap, message); + printf2string(complete_message, message, ap); + va_end(ap); + + static_cast<epimpl*>(parser)->event_error(complete_message); + } + //#################################################################### + static void cb_ignore (void*, const xmlChar*, int) { + return; + } +} // extern "C" + //#################################################################### xml::event_parser::event_parser (void) { pimpl_ = new epimpl(*this); @@ -302,53 +341,3 @@ parser_status_ = false; xmlStopParser(parser_context_); } -//#################################################################### -namespace { - //#################################################################### - extern "C" xmlEntityPtr cb_get_entity (void *, const xmlChar *name) - { return xmlGetPredefinedEntity(name); } - //#################################################################### - extern "C" void cb_start_element (void *parser, const xmlChar *tag, const xmlChar **props) - { static_cast<epimpl*>(parser)->event_start_element(tag, props); } - //#################################################################### - extern "C" void cb_end_element (void *parser, const xmlChar *tag) - { static_cast<epimpl*>(parser)->event_end_element(tag); } - //#################################################################### - extern "C" void cb_text (void *parser, const xmlChar *text, int length) - { static_cast<epimpl*>(parser)->event_text(text, length); } - //#################################################################### - extern "C" void cb_pi (void *parser, const xmlChar *target, const xmlChar *data) - { static_cast<epimpl*>(parser)->event_pi(target, data); } - //#################################################################### - extern "C" void cb_comment (void *parser, const xmlChar *text) - { static_cast<epimpl*>(parser)->event_comment(text); } - //#################################################################### - extern "C" void cb_cdata (void *parser, const xmlChar *text, int length) - { static_cast<epimpl*>(parser)->event_cdata(text, length); } - //#################################################################### - extern "C" void cb_warning (void *parser, const char *message, ...) { - std::string complete_message; - - va_list ap; - va_start(ap, message); - printf2string(complete_message, message, ap); - va_end(ap); - - static_cast<epimpl*>(parser)->event_warning(complete_message); - } - //#################################################################### - extern "C" void cb_error (void *parser, const char *message, ...) { - std::string complete_message; - - va_list ap; - va_start(ap, message); - printf2string(complete_message, message, ap); - va_end(ap); - - static_cast<epimpl*>(parser)->event_error(complete_message); - } - //#################################################################### - extern "C" void cb_ignore (void*, const xmlChar*, int) { - return; - } -} // end anonymous namespace Modified: trunk/src/libxml/init.cxx =================================================================== --- trunk/src/libxml/init.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxml/init.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -43,8 +43,12 @@ #include <libxml/parser.h> //#################################################################### -namespace { - extern "C" void xml_error (void *, const char*, ...); +extern "C" +{ + static void xml_error (void *, const char*, ...) + { + // don't do anything + } } //#################################################################### int xml::init::ms_counter = 0; @@ -98,8 +102,3 @@ xmlDoValidityCheckingDefaultValue = flag ? 1 : 0; } //#################################################################### -namespace { - extern "C" void xml_error (void*, const char*, ...) - { /* don't do anything */ } -} -//#################################################################### Modified: trunk/src/libxml/tree_parser.cxx =================================================================== --- trunk/src/libxml/tree_parser.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxml/tree_parser.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -67,11 +67,14 @@ //#################################################################### namespace { const char const_default_error[] = "unknown XML parsing error"; +} - extern "C" void cb_tree_error (void *v, const char *message, ...); - extern "C" void cb_tree_warning (void *v, const char *, ...); - extern "C" void cb_tree_ignore (void*, const xmlChar*, int); +extern "C" { + static void cb_tree_error (void *v, const char *message, ...); + static void cb_tree_warning (void *v, const char *, ...); + static void cb_tree_ignore (void*, const xmlChar*, int); } + //#################################################################### struct xml::impl::tree_impl { tree_impl (void) : last_error_(const_default_error), warnings_(false), okay_(false) { @@ -91,7 +94,46 @@ bool warnings_; bool okay_; }; + //#################################################################### +extern "C" +{ +//#################################################################### +static void cb_tree_error (void *v, const char *message, ...) { +try { + + xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(v); + tree_impl *p = static_cast<tree_impl*>(ctxt->_private); + if (!p) return; // handle bug in older versions of libxml + + va_list ap; + va_start(ap, message); + printf2string(p->last_error_, message, ap); + va_end(ap); + + xmlStopParser(ctxt); +} catch (...) { } +} +//#################################################################### +static void cb_tree_warning (void *v, const char *, ...) { +try { + + xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(v); + tree_impl *p = static_cast<tree_impl*>(ctxt->_private); + if (!p) return; // handle bug in older versions of libxml + + p->warnings_ = true; + +} catch (...) { } +} +//#################################################################### +static void cb_tree_ignore (void*, const xmlChar*, int) { +return; +} + +} // extern "C" + +//#################################################################### xml::tree_parser::tree_parser (const char *name, bool allow_exceptions) { std::auto_ptr<tree_impl> ap(pimpl_ = new tree_impl); @@ -162,40 +204,3 @@ const xml::document& xml::tree_parser::get_document (void) const { return pimpl_->doc_; } -//#################################################################### -namespace { - //#################################################################### - extern "C" void cb_tree_error (void *v, const char *message, ...) { - try { - - xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(v); - tree_impl *p = static_cast<tree_impl*>(ctxt->_private); - if (!p) return; // handle bug in older versions of libxml - - va_list ap; - va_start(ap, message); - printf2string(p->last_error_, message, ap); - va_end(ap); - - xmlStopParser(ctxt); - } catch (...) { } - } - //#################################################################### - extern "C" void cb_tree_warning (void *v, const char *, ...) { - try { - - xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(v); - tree_impl *p = static_cast<tree_impl*>(ctxt->_private); - if (!p) return; // handle bug in older versions of libxml - - p->warnings_ = true; - - } catch (...) { } - } - //#################################################################### - extern "C" void cb_tree_ignore (void*, const xmlChar*, int) { - return; - } - //#################################################################### -} -//#################################################################### Modified: trunk/src/libxslt/init.cxx =================================================================== --- trunk/src/libxslt/init.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxslt/init.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -44,16 +44,16 @@ #include <libxslt/xsltutils.h> #include <libexslt/exslt.h> -namespace +extern "C" { -extern "C" void xslt_error(void *, const char*, ...) +static void xslt_error(void *, const char*, ...) { // don't do anything; we install context-specific error handler to // catch errors while applying a stylesheet } -} // anonymous namespace +} // extern "C" int xslt::init::ms_counter = 0; Modified: trunk/src/libxslt/stylesheet.cxx =================================================================== --- trunk/src/libxslt/stylesheet.cxx 2009-06-02 16:20:11 UTC (rev 149) +++ trunk/src/libxslt/stylesheet.cxx 2009-06-02 16:42:51 UTC (rev 150) @@ -121,8 +121,11 @@ } -extern "C" void xsltwrapp_error_cb(void *c, const char *message, ...) +extern "C" { + +static void error_cb(void *c, const char *message, ...) +{ xsltTransformContextPtr ctxt = static_cast<xsltTransformContextPtr>(c); xslt::stylesheet::pimpl *impl = static_cast<xslt::stylesheet::pimpl*>(ctxt->_private); @@ -146,6 +149,7 @@ impl->error_.append(formatted); } +} // extern "C" xmlDocPtr apply_stylesheet(xslt::stylesheet::pimpl *impl, xmlDocPtr doc, @@ -159,7 +163,7 @@ xsltTransformContextPtr ctxt = xsltNewTransformContext(style, doc); ctxt->_private = impl; - xsltSetTransformErrorFunc(ctxt, ctxt, xsltwrapp_error_cb); + xsltSetTransformErrorFunc(ctxt, ctxt, error_cb); // clear the error flag before applying the stylesheet impl->errors_occured_ = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |