/* wrapper for stats_event, this takes a charset to convert from */ void stats_event_conv(const char *mount, const char *name, const char *value, const char *charset) { const char *metadata = value; xmlBufferPtr conv = xmlBufferCreate (); if (charset && value) { xmlCharEncodingHandlerPtr handle = xmlFindCharEncodingHandler (charset); if (handle) { xmlBufferPtr raw = xmlBufferCreate (); xmlBufferAdd (raw, (const xmlChar *)value, strlen (value)); if (xmlCharEncInFunc (handle, conv, raw) > 0) metadata = (char *)xmlBufferContent (conv); xmlBufferFree (raw); xmlCharEncCloseFunc (handle); } else WARN1 ("No charset found for \"%s\"", charset); } stats_event (mount, name, metadata); xmlBufferFree (conv); }
bool XMLWrapper::convertFromString(const char *text, xmlChar *&xmlText) { bool result = false; xmlBufferPtr in = xmlBufferCreateStatic((void*) text, strlen(text)); xmlBufferPtr out = xmlBufferCreate(); int ret = xmlCharEncInFunc(mCharEncodingHandler, out, in); if (ret >= 0) { result = true; xmlText = xmlBufferDetach(out); } xmlBufferFree(in); xmlBufferFree(out); return result; }
xmlChar* PmmFastEncodeString( int charset, const xmlChar *string, const xmlChar *encoding ) { xmlCharEncodingHandlerPtr coder = NULL; xmlChar *retval = NULL; xmlBufferPtr in = NULL, out = NULL; if ( charset == XML_CHAR_ENCODING_UTF8 ) { /* warn("use UTF8 for encoding ... %s ", string); */ return xmlStrdup( string ); } else if ( charset == XML_CHAR_ENCODING_ERROR ) { /* warn("no standard encoding %s\n", encoding); */ coder =xmlFindCharEncodingHandler( (const char *)encoding ); } else if ( charset == XML_CHAR_ENCODING_NONE ) { xs_warn("PmmFastEncodeString: no encoding found\n"); } else { /* warn( "use document encoding %s (%d)", encoding, charset ); */ coder= xmlGetCharEncodingHandler( charset ); } if ( coder != NULL ) { xs_warn("PmmFastEncodeString: coding machine found \n"); in = xmlBufferCreate(); out = xmlBufferCreate(); xmlBufferCCat( in, (const char *) string ); if ( xmlCharEncInFunc( coder, out, in ) >= 0 ) { retval = xmlStrdup( out->content ); /* warn( "encoded string is %s" , retval); */ } else { /* warn( "b0rked encoiding!\n"); */ } xmlBufferFree( in ); xmlBufferFree( out ); xmlCharEncCloseFunc( coder ); } return retval; }
bool XMLWrapper::convertFromString(const char *text, xmlChar *&xmlText) { bool result = false; xmlBufferPtr in = xmlBufferCreateStatic((void*) text, strlen(text)); xmlBufferPtr out = xmlBufferCreate(); int ret = xmlCharEncInFunc(mCharEncodingHandler, out, in); if (ret >= 0) { result = true; #if LIBXML_VERSION >= 20800 xmlText = xmlBufferDetach(out); #else xmlText = xmlStrdup(xmlBufferContent(out)); #endif } xmlBufferFree(in); xmlBufferFree(out); return result; }
void stats_set_conv (long handle, const char *name, const char *value, const char *charset) { if (charset) { xmlCharEncodingHandlerPtr encoding = xmlFindCharEncodingHandler (charset); if (encoding) { xmlBufferPtr in = xmlBufferCreate (); xmlBufferPtr conv = xmlBufferCreate (); xmlBufferCCat (in, value); if (xmlCharEncInFunc (encoding, conv, in) > 0) stats_set_entity_decode (handle, name, (void*)xmlBufferContent (conv)); xmlBufferFree (in); xmlBufferFree (conv); xmlCharEncCloseFunc (encoding); return; } WARN1 ("No charset found for \"%s\"", charset); return; } stats_set_entity_decode (handle, name, value); }