summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/opensync/wbxml2/00-fix-includes.patch24
-rw-r--r--packages/opensync/wbxml2/01-anonymous-support-and-misc-fixes.patch304
-rw-r--r--packages/opensync/wbxml2/02-namespaces.patch164
-rw-r--r--packages/opensync/wbxml2/04_saxlike_entity_parsing.patch90
-rw-r--r--packages/opensync/wbxml2/05-syncml-fixes.patch124
-rw-r--r--packages/opensync/wbxml2/06-no-install-docs.patch14
-rw-r--r--packages/opensync/wbxml2/07-current_attr_null.patch22
-rw-r--r--packages/opensync/wbxml2/08-maxsize-translation-table.patch17
-rw-r--r--packages/opensync/wbxml2_0.9.0.bb24
-rw-r--r--packages/opensync/wbxml2_0.9.2.bb29
10 files changed, 788 insertions, 24 deletions
diff --git a/packages/opensync/wbxml2/00-fix-includes.patch b/packages/opensync/wbxml2/00-fix-includes.patch
new file mode 100644
index 0000000000..8fe415dab7
--- /dev/null
+++ b/packages/opensync/wbxml2/00-fix-includes.patch
@@ -0,0 +1,24 @@
+diff -urN wbxml2-0.9.2.orig/src/Makefile.am wbxml2-0.9.2/src/Makefile.am
+--- wbxml2-0.9.2.orig/src/Makefile.am 2006-07-11 13:47:44.000000000 +0200
++++ wbxml2-0.9.2/src/Makefile.am 2008-11-25 08:26:35.000000000 +0100
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in
+
+ INCLUDES =\
+- -I. -I/usr/include
++ -I.
+
+ CFLAGS =\
+ -DHAVE_CONFIG_H\
+diff -urN wbxml2-0.9.2.orig/tools/Makefile.am wbxml2-0.9.2/tools/Makefile.am
+--- wbxml2-0.9.2.orig/tools/Makefile.am 2006-07-11 13:47:46.000000000 +0200
++++ wbxml2-0.9.2/tools/Makefile.am 2008-11-25 08:36:54.000000000 +0100
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in
+
+ INCLUDES =\
+- -I. -I../src -I/usr/include
++ -I. -I../src
+
+ CFLAGS =\
+ -DHAVE_CONFIG_H\
diff --git a/packages/opensync/wbxml2/01-anonymous-support-and-misc-fixes.patch b/packages/opensync/wbxml2/01-anonymous-support-and-misc-fixes.patch
new file mode 100644
index 0000000000..225c581c38
--- /dev/null
+++ b/packages/opensync/wbxml2/01-anonymous-support-and-misc-fixes.patch
@@ -0,0 +1,304 @@
+diff -Nru wbxml2-0.9.2.orig/bootstrap wbxml2-0.9.2/bootstrap
+--- wbxml2-0.9.2.orig/bootstrap 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/bootstrap 2008-01-10 19:03:44.000000000 +0000
+@@ -1,8 +1,2 @@
+-#! /bin/sh
+-libtoolize
+-aclocal
+-autoheader
+-# automake --foreign --add-missing --copy
+-automake --add-missing
+-autoconf
+-./configure --prefix=/usr
++#!/bin/sh
++autoreconf -i
+diff -Nru wbxml2-0.9.2.orig/configure.in wbxml2-0.9.2/configure.in
+--- wbxml2-0.9.2.orig/configure.in 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/configure.in 2008-01-10 19:03:44.000000000 +0000
+@@ -1,11 +1,11 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(doxygen.h)
+-AM_INIT_AUTOMAKE(wbxml2, 0.9.0)
++AM_INIT_AUTOMAKE(wbxml2, 0.9.2)
+ AM_CONFIG_HEADER(config.h)
+
+
+ dnl Define common variables
+-VERSION="0.9.0"
++VERSION="0.9.2"
+ AC_SUBST(VERSION)
+ RELEASE="1"
+ AC_SUBST(RELEASE)
+diff -Nru wbxml2-0.9.2.orig/libwbxml2.pc.in wbxml2-0.9.2/libwbxml2.pc.in
+--- wbxml2-0.9.2.orig/libwbxml2.pc.in 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/libwbxml2.pc.in 2008-01-10 19:03:44.000000000 +0000
+@@ -8,4 +8,4 @@
+ Version: @VERSION@
+ Requires: libxml-2.0 >= 2.6
+ Libs: -L${libdir} -lwbxml2
+-Cflags: -I${includedir}
++Cflags: -I${includedir} -DHAVE_EXPAT -D_REENTRANT -DWBXML_ENCODER_USE_STRTBL -DWBXML_SUPPORT_WML -DWBXML_SUPPORT_WTA -DWBXML_SUPPORT_SI -DWBXML_SUPPORT_SL -DWBXML_SUPPORT_CO -DWBXML_SUPPORT_PROV -DWBXML_SUPPORT_EMN -DWBXML_SUPPORT_DRMREL -DWBXML_SUPPORT_OTA_SETTINGS -DWBXML_SUPPORT_SYNCML -DWBXML_SUPPORT_WV -DWBXML_SUPPORT_AIRSYNC
+--- wbxml2-0.9.2.orig/src/Makefile.am 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/Makefile.am 2008-01-10 19:03:44.000000000 +0000
+@@ -3,7 +3,7 @@
+ INCLUDES =\
+ -I. -I/usr/include
+
+-CFLAGS =\
++AM_CFLAGS =\
+ -DHAVE_CONFIG_H\
+ -DHAVE_EXPAT\
+ -D_REENTRANT\
+@@ -20,9 +20,7 @@
+ -DWBXML_SUPPORT_SYNCML\
+ -DWBXML_SUPPORT_WV\
+ -DWBXML_SUPPORT_AIRSYNC\
+- -Wall -Wimplicit -Wreturn-type -Wunused -Wswitch -Wcomment -Wuninitialized -Wparentheses -Wpointer-arith -Wmissing-prototypes\
+- -O3\
+- -g
++ -Wall -g
+
+ lib_LTLIBRARIES = libwbxml2.la
+
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_encoder.c wbxml2-0.9.2/src/wbxml_encoder.c
+--- wbxml2-0.9.2.orig/src/wbxml_encoder.c 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_encoder.c 2008-01-10 19:03:44.000000000 +0000
+@@ -153,6 +153,7 @@
+ WB_BOOL use_strtbl; /**< Do we use String Table when generating WBXML output ? (default: YES) */
+ #endif /* WBXML_ENCODER_USE_STRTBL */
+ WB_BOOL xml_encode_header; /**< Do we generate XML Header ? */
++ WB_BOOL produce_anonymous; /**< Do we produce anonymous documents? (default: NO) */
+ WBXMLVersion wbxml_version; /**< WBXML Version to use (when generating WBXML output) */
+ WBXMLCharsetMIBEnum output_charset; /**< Output charset encoding */
+ WB_BOOL flow_mode; /**< Is Flow Mode encoding activated ? */
+@@ -400,6 +401,7 @@
+ encoder->cdata = NULL;
+
+ encoder->xml_encode_header = TRUE;
++ encoder->produce_anonymous = FALSE;
+
+ /* Default Version: WBXML 1.3 */
+ encoder->wbxml_version = WBXML_VERSION_13;
+@@ -509,6 +511,15 @@
+ }
+
+
++WBXML_DECLARE(void) wbxml_encoder_set_produce_anonymous(WBXMLEncoder *encoder, WB_BOOL set_anonymous)
++{
++ if (encoder == NULL)
++ return;
++
++ encoder->produce_anonymous = set_anonymous;
++}
++
++
+ WBXML_DECLARE(void) wbxml_encoder_set_wbxml_version(WBXMLEncoder *encoder, WBXMLVersion version)
+ {
+ if (encoder == NULL)
+@@ -1464,7 +1475,8 @@
+
+ /* Encode Public ID */
+ /* If WBXML Public Id is '0x01' (unknown), or we forced it, add the XML Public ID in the String Table */
+- if (encoder->textual_publicid || (public_id == WBXML_PUBLIC_ID_UNKNOWN))
++ if ((encoder->textual_publicid || (public_id == WBXML_PUBLIC_ID_UNKNOWN)) &&
++ !encoder->produce_anonymous)
+ {
+ if (encoder->lang->publicID->xmlPublicID != NULL)
+ {
+@@ -1601,7 +1613,7 @@
+ }
+ else {
+ /* Search tag in Tags Table */
+- if ((tag = wbxml_tables_get_tag_from_xml(encoder->lang, wbxml_tag_get_xml_name(node->name))) != NULL)
++ if ((tag = wbxml_tables_get_tag_from_xml(encoder->lang, encoder->tagCodePage, wbxml_tag_get_xml_name(node->name))) != NULL)
+ {
+ token = tag->wbxmlToken;
+ page = tag->wbxmlCodePage;
+@@ -2897,7 +2909,7 @@
+ /* Date and time can be encoded as OPAQUE data or as a string as specified in [ISO8601]. For now we
+ * keep the string... but if someone wants to code the Date and time encoding function :-)
+ */
+- /* return wbxml_encode_wv_datetime(encoder, buffer); */
++ return wbxml_encode_wv_datetime(encoder, buffer);
+ break;
+ case WBXML_WV_DATA_TYPE_BINARY:
+ /** @todo Binary Encoding !! */
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_encoder.h wbxml2-0.9.2/src/wbxml_encoder.h
+--- wbxml2-0.9.2.orig/src/wbxml_encoder.h 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_encoder.h 2008-01-10 19:03:44.000000000 +0000
+@@ -118,6 +118,13 @@
+ WBXML_DECLARE(void) wbxml_encoder_set_use_strtbl(WBXMLEncoder *encoder, WB_BOOL use_strtbl);
+
+ /**
++ * @brief Set if we want to produce anonymous WBXML documents [Default: FALSE]
++ * @param encoder [in] The WBXML encoder
++ * @param set_anonymous [in] TRUE to produce anonymous documents, FALSE otherwise
++ */
++WBXML_DECLARE(void) wbxml_encoder_set_produce_anonymous(WBXMLEncoder *encoder, WB_BOOL set_anonymous);
++
++/**
+ * @brief Set the WBXML Version of the output document, when generating WBXML [Default: 'WBXML_VERSION_TOKEN_13' (1.3)]
+ * @param encoder [in] The WBXML Encoder
+ * @param version [in] The WBXML Version
+diff -Nru wbxml2-0.9.2.orig/src/wbxml.h wbxml2-0.9.2/src/wbxml.h
+--- wbxml2-0.9.2.orig/src/wbxml.h 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml.h 2008-01-10 19:03:44.000000000 +0000
+@@ -285,6 +285,7 @@
+ WBXMLVersion wbxml_version; /**< WBXML Version */
+ WB_BOOL keep_ignorable_ws; /**< Keep Ignorable Whitespaces (Default: FALSE) */
+ WB_BOOL use_strtbl; /**< Generate String Table (Default: TRUE) */
++ WB_BOOL produce_anonymous; /**< Produce an anonymous document (Default: FALSE) */
+ } WBXMLGenWBXMLParams;
+
+
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_tables.c wbxml2-0.9.2/src/wbxml_tables.c
+--- wbxml2-0.9.2.orig/src/wbxml_tables.c 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tables.c 2008-01-10 19:03:44.000000000 +0000
+@@ -2992,17 +2992,40 @@
+
+
+ WBXML_DECLARE(const WBXMLTagEntry *) wbxml_tables_get_tag_from_xml(const WBXMLLangEntry *lang_table,
++ const int cur_code_page,
+ const WB_UTINY *xml_name)
+ {
+- WB_ULONG i = 0;
++ WB_ULONG i;
++ WB_BOOL found_current = FALSE;
+
+ if ((lang_table == NULL) || (lang_table->tagTable == NULL) || (xml_name == NULL))
+ return NULL;
+
+- while (lang_table->tagTable[i].xmlName != NULL) {
+- if (WBXML_STRCMP(lang_table->tagTable[i].xmlName, xml_name) == 0)
+- return &(lang_table->tagTable[i]);
+- i++;
++ /* First off, try to find it in the current code page, if provided */
++ for (i = 0; cur_code_page >= 0 && lang_table->tagTable[i].xmlName != NULL; i++) {
++ const WBXMLTagEntry *entry = &lang_table->tagTable[i];
++
++ if (entry->wbxmlCodePage == cur_code_page) {
++ found_current = TRUE;
++
++ if (WBXML_STRCMP(entry->xmlName, xml_name) == 0)
++ return entry;
++ } else {
++ if (found_current)
++ break;
++ }
++ }
++
++ /* Then try all others */
++ for (i = 0; lang_table->tagTable[i].xmlName != NULL; i++) {
++ const WBXMLTagEntry *entry = &lang_table->tagTable[i];
++
++ /* We've already searched the current code page */
++ if (cur_code_page >= 0 && entry->wbxmlCodePage == cur_code_page)
++ continue;
++
++ if (WBXML_STRCMP(entry->xmlName, xml_name) == 0)
++ return entry;
+ }
+
+ return NULL;
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_tables.h wbxml2-0.9.2/src/wbxml_tables.h
+--- wbxml2-0.9.2.orig/src/wbxml_tables.h 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tables.h 2008-01-10 19:03:44.000000000 +0000
+@@ -255,10 +255,12 @@
+ /**
+ * @brief Search for a Tag Entry in Language Table, given the XML Name of the Tag
+ * @param lang_table The Language Table to search in
++ * @param cur_code_page The current code page so that it can be searched first, or -1 to start from the first one.
+ * @param xml_name The XML Name of the Tag to search
+ * @return The Tag Entry of this XML Name in Language Table, or NULL if not found
+ */
+ WBXML_DECLARE(const WBXMLTagEntry *) wbxml_tables_get_tag_from_xml(const WBXMLLangEntry *lang_table,
++ const int cur_code_page,
+ const WB_UTINY *xml_name);
+
+ /**
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_tree.c wbxml2-0.9.2/src/wbxml_tree.c
+--- wbxml2-0.9.2.orig/src/wbxml_tree.c 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tree.c 2008-01-10 19:03:44.000000000 +0000
+@@ -137,6 +137,9 @@
+
+ /* Use String Table */
+ wbxml_encoder_set_use_strtbl(wbxml_encoder, TRUE);
++
++ /* Don't produce an anonymous document by default */
++ wbxml_encoder_set_produce_anonymous(wbxml_encoder, FALSE);
+ }
+ else {
+ /* WBXML Version */
+@@ -154,6 +157,10 @@
+ /* String Table */
+ wbxml_encoder_set_use_strtbl(wbxml_encoder, params->use_strtbl);
+
++ /* Produce an anonymous document? */
++ wbxml_encoder_set_produce_anonymous(wbxml_encoder,
++ params->produce_anonymous);
++
+ /** @todo Add parameter to call : wbxml_encoder_set_output_charset() */
+ }
+
+@@ -455,7 +462,7 @@
+ WBXMLTag *tag = NULL;
+
+ /* Search for XML Tag Name in Table */
+- if ((tag_entry = wbxml_tables_get_tag_from_xml(lang_table, name)) != NULL) {
++ if ((tag_entry = wbxml_tables_get_tag_from_xml(lang_table, -1, name)) != NULL) {
+ /* Found : token tag */
+ tag = wbxml_tag_create_token(tag_entry);
+ }
+@@ -921,6 +928,7 @@
+ result->lang = wbxml_tables_get_table(lang);
+ result->root = NULL;
+ result->orig_charset = orig_charset;
++ result->cur_code_page = 0;
+
+ return result;
+ }
+@@ -1085,7 +1093,9 @@
+ WBXMLTag *tag = NULL;
+
+ /* Search for XML Tag Name in Table */
+- if ((tag_entry = wbxml_tables_get_tag_from_xml(tree->lang, (const WB_UTINY *) name)) != NULL) {
++ if ((tag_entry = wbxml_tables_get_tag_from_xml(tree->lang, tree->cur_code_page, (const WB_UTINY *) name)) != NULL) {
++ tree->cur_code_page = tag_entry->wbxmlCodePage;
++
+ /* Found : token tag */
+ tag = wbxml_tag_create_token(tag_entry);
+ }
+diff -Nru wbxml2-0.9.2.orig/src/wbxml_tree.h wbxml2-0.9.2/src/wbxml_tree.h
+--- wbxml2-0.9.2.orig/src/wbxml_tree.h 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tree.h 2008-01-10 19:03:44.000000000 +0000
+@@ -97,6 +97,7 @@
+ const WBXMLLangEntry *lang; /**< Language Table */
+ WBXMLTreeNode *root; /**< Root Element */
+ WBXMLCharsetMIBEnum orig_charset; /**< Charset encoding of original document */
++ WB_UTINY cur_code_page;/**< Last seen code page */
+ } WBXMLTree;
+
+
+diff -Nru wbxml2-0.9.2.orig/tools/Makefile.am wbxml2-0.9.2/tools/Makefile.am
+--- wbxml2-0.9.2.orig/tools/Makefile.am 2008-01-10 19:03:28.000000000 +0000
++++ wbxml2-0.9.2/tools/Makefile.am 2008-01-10 19:03:44.000000000 +0000
+@@ -3,7 +3,7 @@
+ INCLUDES =\
+ -I. -I../src -I/usr/include
+
+-CFLAGS =\
++AM_CFLAGS =\
+ -DHAVE_CONFIG_H\
+ -DHAVE_EXPAT\
+ -D_REENTRANT\
+@@ -20,9 +20,7 @@
+ -DWBXML_SUPPORT_SYNCML\
+ -DWBXML_SUPPORT_WV\
+ -DWBXML_SUPPORT_AIRSYNC\
+- -Wall -Wimplicit -Wreturn-type -Wunused -Wswitch -Wcomment -Wuninitialized -Wparentheses -Wpointer-arith -Wmissing-prototypes\
+- -O3\
+- -g
++ -Wall -g
+
+ bin_PROGRAMS = wbxml2xml xml2wbxml
+
diff --git a/packages/opensync/wbxml2/02-namespaces.patch b/packages/opensync/wbxml2/02-namespaces.patch
new file mode 100644
index 0000000000..3c8efcb350
--- /dev/null
+++ b/packages/opensync/wbxml2/02-namespaces.patch
@@ -0,0 +1,164 @@
+diff -Nru wbxml2-0.9.2.patched/src/wbxml_tables.c wbxml2-0.9.2/src/wbxml_tables.c
+--- wbxml2-0.9.2.patched/src/wbxml_tables.c 2008-01-10 19:05:45.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tables.c 2008-01-10 19:04:55.000000000 +0000
+@@ -2806,6 +2806,46 @@
+ { NULL, 0x00, 0x00 }
+ };
+
++/* NOTE:
++ * These namespace names differ from the Microsoft-assigned namespaces. The
++ * reason for the difference is that the Microsoft-assigned names are not
++ * valid URI's and hence produce warning messages when processed by some
++ * libraries. The mapping is as follows:
++ *
++ * Microsoft Ours
++ * --------- ----
++ * AirSync: http://synce.org/formats/airsync_wm5/airsync
++ * POOMCONTACTS: http://synce.org/formats/airsync_wm5/contacts
++ * POOMMAIL: http://synce.org/formats/airsync_wm5/mail
++ * AirNotify: http://synce.org/formats/airsync_wm5/airnotify
++ * POOMCAL: http://synce.org/formats/airsync_wm5/calendar
++ * Move: http://synce.org/formats/airsync_wm5/move
++ * GetItemEstimate: http://synce.org/formats/airsync_wm5/getitemestimate
++ * FolderHierarchy: http://synce.org/formats/airsync_wm5/folderhierarchy
++ * MeetingResponse: http://synce.org/formats/airsync_wm5/meetingresponse
++ * POOMTASKS: http://synce.org/formats/airsync_wm5/tasks
++ * ResolveRecipients: http://synce.org/formats/airsync_wm5/resolverecipients
++ * ValidateCert: http://synce.org/formats/airsync_wm5/validatecert
++ * POOMCONTACTS2: http://synce.org/formats/airsync_wm5/contacts2
++ *
++ */
++const WBXMLNameSpaceEntry sv_airsync_ns_table[] = {
++ { "http://synce.org/formats/airsync_wm5/airsync", 0x00 }, /**< Code Page 0 */
++ { "http://synce.org/formats/airsync_wm5/contacts", 0x01 }, /**< Code Page 1 */
++ { "http://synce.org/formats/airsync_wm5/mail", 0x02 }, /**< Code Page 2 */
++ { "http://synce.org/formats/airsync_wm5/airnotify", 0x03 }, /**< Code Page 3 */
++ { "http://synce.org/formats/airsync_wm5/calendar", 0x04 }, /**< Code Page 4 */
++ { "http://synce.org/formats/airsync_wm5/move", 0x05 }, /**< Code Page 5 */
++ { "http://synce.org/formats/airsync_wm5/getitemestimate", 0x06 }, /**< Code Page 6 */
++ { "http://synce.org/formats/airsync_wm5/folderhierarchy", 0x07 }, /**< Code Page 7 */
++ { "http://synce.org/formats/airsync_wm5/meetingresponse", 0x08 }, /**< Code Page 8 */
++ { "http://synce.org/formats/airsync_wm5/tasks", 0x09 }, /**< Code Page 9 */
++ { "http://synce.org/formats/airsync_wm5/resolverecipients", 0x0a }, /**< Code Page 10 */
++ { "http://synce.org/formats/airsync_wm5/validatecert", 0x0b }, /**< Code Page 11 */
++ { "http://synce.org/formats/airsync_wm5/contacts2", 0x0c }, /**< Code Page 12 */
++ { NULL, 0x00 }
++};
++
+ #endif /* WBXML_SUPPORT_AIRSYNC */
+
+
+@@ -2885,7 +2925,7 @@
+ #endif /* WBXML_SUPPORT_WV */
+
+ #if defined( WBXML_SUPPORT_AIRSYNC )
+- { WBXML_LANG_AIRSYNC, &sv_airsync_public_id, sv_airsync_tag_table, NULL, NULL, NULL, NULL },
++ { WBXML_LANG_AIRSYNC, &sv_airsync_public_id, sv_airsync_tag_table, sv_airsync_ns_table, NULL, NULL, NULL },
+ #endif /* WBXML_SUPPORT_AIRSYNC */
+
+ { WBXML_LANG_UNKNOWN, NULL, NULL, NULL, NULL, NULL, NULL }
+@@ -3169,3 +3209,21 @@
+
+ return NULL;
+ }
++
++WBXML_DECLARE(WB_UTINY) wbxml_tables_get_code_page(const WBXMLNameSpaceEntry *ns_table, const WB_TINY* xmlns)
++{
++ WB_ULONG i = 0;
++
++ if (ns_table == NULL)
++ return NULL;
++
++ while (ns_table[i].xmlNameSpace != NULL)
++ {
++ if (strcmp(ns_table[i].xmlNameSpace, xmlns) == 0)
++ return ns_table[i].wbxmlCodePage;
++
++ i++;
++ }
++
++ return NULL;
++}
+diff -Nru wbxml2-0.9.2.patched/src/wbxml_tables.h wbxml2-0.9.2/src/wbxml_tables.h
+--- wbxml2-0.9.2.patched/src/wbxml_tables.h 2008-01-10 19:05:45.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tables.h 2008-01-10 19:04:55.000000000 +0000
+@@ -310,6 +310,9 @@
+ WBXML_DECLARE(const WB_TINY *) wbxml_tables_get_xmlns(const WBXMLNameSpaceEntry *ns_table,
+ WB_UTINY code_page);
+
++WBXML_DECLARE(WB_UTINY) wbxml_tables_get_code_page(const WBXMLNameSpaceEntry *ns_table,
++ const WB_TINY* xmlns);
++
+ /** @} */
+
+ #ifdef __cplusplus
+diff -Nru wbxml2-0.9.2.patched/src/wbxml_tree.c wbxml2-0.9.2/src/wbxml_tree.c
+--- wbxml2-0.9.2.patched/src/wbxml_tree.c 2008-01-10 19:05:45.000000000 +0000
++++ wbxml2-0.9.2/src/wbxml_tree.c 2008-01-10 19:04:55.000000000 +0000
+@@ -34,6 +34,7 @@
+
+ #include "wbxml.h"
+
++#define WBXML_NAMESPACE_SEPARATOR ':'
+
+ /***************************************************
+ * Public Functions
+@@ -201,9 +202,9 @@
+ *tree = NULL;
+
+ /* Create Expat XML Parser */
+- if ((xml_parser = XML_ParserCreate(NULL)) == NULL)
++ if ((xml_parser = XML_ParserCreateNS(NULL, WBXML_NAMESPACE_SEPARATOR)) == NULL)
+ return WBXML_ERROR_NOT_ENOUGH_MEMORY;
+-
++
+ /* Init context */
+ wbxml_tree_clb_ctx.current = NULL;
+ wbxml_tree_clb_ctx.error = WBXML_OK;
+@@ -1091,9 +1092,32 @@
+ const WBXMLTagEntry *tag_entry = NULL;
+ WBXMLTreeNode *node = NULL;
+ WBXMLTag *tag = NULL;
+-
++ WB_UTINY *sep = NULL;
++ const WB_UTINY *namespace_name = NULL;
++ const WB_UTINY *element_name = NULL;
++
++ /* Separate the namespace from the element name */
++ sep = (WB_UTINY *)strrchr((const WB_TINY *) name, WBXML_NAMESPACE_SEPARATOR);
++ if (sep != NULL) {
++ /* Temporarily split the string by changing the separater to a null-terminator */
++ *sep = '\0';
++
++ namespace_name = name;
++ element_name = sep+1;
++ }
++ else {
++ /* No namespace, so just set it to an empty string (specifically, the null-terminator at the end of the elemet name */
++ namespace_name = name + strlen((const WB_TINY *) name);
++ element_name = name;
++ }
++
++ WBXML_DEBUG((WBXML_CONV, "Parsed element name: Namespace='%s', Element='%s'", namespace_name, element_name));
++
++ /* Update the current code page to match the one specified by the namespace */
++ tree->cur_code_page = wbxml_tables_get_code_page(tree->lang->nsTable, (const WB_TINY *) namespace_name);
++
+ /* Search for XML Tag Name in Table */
+- if ((tag_entry = wbxml_tables_get_tag_from_xml(tree->lang, tree->cur_code_page, (const WB_UTINY *) name)) != NULL) {
++ if ((tag_entry = wbxml_tables_get_tag_from_xml(tree->lang, tree->cur_code_page, element_name)) != NULL) {
+ tree->cur_code_page = tag_entry->wbxmlCodePage;
+
+ /* Found : token tag */
+@@ -1104,6 +1128,11 @@
+ tag = wbxml_tag_create_literal(name);
+ }
+
++ if (sep != NULL) {
++ /* We are done with the element and namespace names, so put the separator character back */
++ *sep = WBXML_NAMESPACE_SEPARATOR;
++ }
++
+ if (tag == NULL)
+ return NULL;
+
diff --git a/packages/opensync/wbxml2/04_saxlike_entity_parsing.patch b/packages/opensync/wbxml2/04_saxlike_entity_parsing.patch
new file mode 100644
index 0000000000..43d915b8b7
--- /dev/null
+++ b/packages/opensync/wbxml2/04_saxlike_entity_parsing.patch
@@ -0,0 +1,90 @@
+diff --git a/src/wbxml_parser.c b/src/wbxml_parser.c
+index c022e00..bea2062 100644
+--- a/src/wbxml_parser.c
++++ b/src/wbxml_parser.c
+@@ -43,6 +43,7 @@
+ */
+
+ #include "wbxml.h"
++#include <assert.h>
+
+
+ /* Memory management related defines */
+@@ -56,10 +57,6 @@
+ /** For unknown Tag Name or Attribute Name (in Best Effort Mode) */
+ #define WBXML_PARSER_UNKNOWN_STRING ((WB_UTINY *)"unknown")
+
+-/** If you want to modify this define, change the 'entcode' variable length in parse_entity() too please */
+-#define WBXML_PARSER_MAX_ENTITY_CODE 999999
+-
+-
+ /**
+ * @brief The WBXML Application Token types
+ */
+@@ -1661,7 +1658,6 @@ static WBXMLError parse_extension(WBXMLParser *parser, WBXMLTokenType code_space
+ */
+ static WBXMLError parse_entity(WBXMLParser *parser, WBXMLBuffer **result)
+ {
+- WB_TINY entity[10];
+ WB_ULONG code = 0;
+ WBXMLError ret = WBXML_OK;
+
+@@ -1674,23 +1670,44 @@ static WBXMLError parse_entity(WBXMLParser *parser, WBXMLBuffer **result)
+ return ret;
+ }
+
+- /* Build Entity */
+- if ( code > WBXML_PARSER_MAX_ENTITY_CODE ) {
+- return WBXML_ERROR_ENTITY_CODE_OVERFLOW;
+- }
+-
+- /**
+- * WARNING: If you change the entity variable length (10 chars), change too
+- * 'WBXML_PARSER_MAX_ENTITY_CODE' defined in this file !
++ /*
++ * Convert the UCS-4 code to a UTF-8 encoded string.
+ */
+- sprintf(entity, "&#%u;", code);
+
+- /* Create result buffer */
+- if ( (*result = wbxml_buffer_create_from_cstr(entity)) == NULL ) {
+- return WBXML_ERROR_NOT_ENOUGH_MEMORY;
++ assert(code < 0x80000000);
++
++ if (code < 0x80)
++ {
++ /* For codes under 0x80, we don't need any fancy formatting. */
++ WB_TINY entity[2] = {(WB_TINY)code, 0};
++
++ /* Create result buffer */
++ if ( (*result = wbxml_buffer_create_from_cstr(entity)) == NULL ) {
++ return WBXML_ERROR_NOT_ENOUGH_MEMORY;
++ }
++
++ return WBXML_OK;
++ }
++ else
++ {
++ WB_TINY masks[5] = {0xFC, 0xF8, 0xF0, 0xE0, 0xC0};
++ WB_TINY entity[7] = {0, 0, 0, 0, 0, 0, 0};
++
++ int index = 5;
++ while (code >= 0x40)
++ {
++ entity[index] = 0x80 | (code & 0x3F);
++ code >>= 6; index--;
++ }
++ entity[index] = masks[index] | code;
++
++ /* Create result buffer */
++ if ( (*result = wbxml_buffer_create_from_cstr(entity + index)) == NULL ) {
++ return WBXML_ERROR_NOT_ENOUGH_MEMORY;
++ }
++
++ return WBXML_OK;
+ }
+-
+- return WBXML_OK;
+ }
+
+
diff --git a/packages/opensync/wbxml2/05-syncml-fixes.patch b/packages/opensync/wbxml2/05-syncml-fixes.patch
new file mode 100644
index 0000000000..855b100779
--- /dev/null
+++ b/packages/opensync/wbxml2/05-syncml-fixes.patch
@@ -0,0 +1,124 @@
+diff -ru wbxml2-0.9.2-original/src/wbxml_encoder.c wbxml2-0.9.2/src/wbxml_encoder.c
+--- wbxml2-0.9.2-original/src/wbxml_encoder.c 2006-07-11 13:47:45.000000000 +0200
++++ wbxml2-0.9.2/src/wbxml_encoder.c 2008-06-20 11:24:17.000000000 +0200
+@@ -1936,7 +1936,8 @@
+ #if defined( WBXML_SUPPORT_SYNCML )
+ /* If this is a SyncML document ? */
+ if ((encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML10) ||
+- (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11))
++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11) ||
++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML12))
+ {
+ /** @todo We must check too if we are in a <Type> */
+
+@@ -4019,7 +4020,8 @@
+ #if defined( WBXML_SUPPORT_SYNCML )
+ /* Change text in <Type> from "application/vnd.syncml-devinf+wbxml" to "application/vnd.syncml-devinf+xml" */
+ if (((encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML10) ||
+- (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11)) &&
++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11) ||
++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML12)) &&
+ (encoder->current_tag != NULL) &&
+ (encoder->current_tag->wbxmlCodePage == 0x01 ) &&
+ (encoder->current_tag->wbxmlToken == 0x13 ) &&
+diff -ru wbxml2-0.9.2-original/src/wbxml_tables.c wbxml2-0.9.2/src/wbxml_tables.c
+--- wbxml2-0.9.2-original/src/wbxml_tables.c 2006-07-11 13:47:45.000000000 +0200
++++ wbxml2-0.9.2/src/wbxml_tables.c 2008-06-20 11:28:18.000000000 +0200
+@@ -1601,21 +1601,21 @@
+ #if defined( WBXML_SUPPORT_SYNCML )
+
+ const WBXMLNameSpaceEntry sv_syncml_syncml10_ns_table[] = {
+- { "syncml:SYNCML1.0", 0x00 }, /**< Code Page 0: SYNCML1.0 */
++ { "SYNCML:SYNCML1.0", 0x00 }, /**< Code Page 0: SYNCML1.0 */
+ { "syncml:metinf", 0x01 }, /**< Code Page 1: metinf */
+ { NULL, 0x00 }
+ };
+
+
+ const WBXMLNameSpaceEntry sv_syncml_syncml11_ns_table[] = {
+- { "syncml:SYNCML1.1", 0x00 }, /**< Code Page 0: SYNCML1.1 */
++ { "SYNCML:SYNCML1.1", 0x00 }, /**< Code Page 0: SYNCML1.1 */
+ { "syncml:metinf", 0x01 }, /**< Code Page 1: metinf */
+ { NULL, 0x00 }
+ };
+
+
+ const WBXMLNameSpaceEntry sv_syncml_syncml12_ns_table[] = {
+- { "syncml:SYNCML1.2", 0x00 }, /**< Code Page 0: SYNCML1.2 */
++ { "SYNCML:SYNCML1.2", 0x00 }, /**< Code Page 0: SYNCML1.2 */
+ { "syncml:metinf", 0x01 }, /**< Code Page 1: metinf */
+ { NULL, 0x00 }
+ };
+diff -ru wbxml2-0.9.2-original/src/wbxml_tree.c wbxml2-0.9.2/src/wbxml_tree.c
+--- wbxml2-0.9.2-original/src/wbxml_tree.c 2006-07-11 13:47:45.000000000 +0200
++++ wbxml2-0.9.2/src/wbxml_tree.c 2008-06-20 11:33:54.000000000 +0200
+@@ -244,7 +244,10 @@
+ }
+ else {
+ if ((ret = wbxml_tree_clb_ctx.error) != WBXML_OK)
++ {
++ WBXML_ERROR((WBXML_CONV, "xml2wbxml conversion failed - context error %i", ret));
+ wbxml_tree_destroy(wbxml_tree_clb_ctx.tree);
++ }
+ else
+ *tree = wbxml_tree_clb_ctx.tree;
+ }
+@@ -798,11 +801,20 @@
+ {
+ /* Check <Type> value */
+ if ((tmp_node->children != NULL) && (tmp_node->children->type == WBXML_TREE_TEXT_NODE)) {
++ /* This function is used by wbxml and xml callbacks.
++ * So content types must be handled for both situations.
++ */
++
+ /* application/vnd.syncml-devinf+wbxml */
+ if (wbxml_buffer_compare_cstr(tmp_node->children->content, "application/vnd.syncml-devinf+wbxml") == 0) {
+ return WBXML_SYNCML_DATA_TYPE_WBXML;
+ }
+
++ /* application/vnd.syncml-devinf+xml */
++ if (wbxml_buffer_compare_cstr(tmp_node->children->content, "application/vnd.syncml-devinf+xml") == 0) {
++ return WBXML_SYNCML_DATA_TYPE_NORMAL;
++ }
++
+ /* text/clear */
+ if (wbxml_buffer_compare_cstr(tmp_node->children->content, "text/clear") == 0) {
+ return WBXML_SYNCML_DATA_TYPE_CLEAR;
+diff -ru wbxml2-0.9.2-original/src/wbxml_tree_clb_xml.c wbxml2-0.9.2/src/wbxml_tree_clb_xml.c
+--- wbxml2-0.9.2-original/src/wbxml_tree_clb_xml.c 2006-07-11 13:47:46.000000000 +0200
++++ wbxml2-0.9.2/src/wbxml_tree_clb_xml.c 2008-06-20 11:39:27.000000000 +0200
+@@ -142,7 +142,7 @@
+ #if defined( WBXML_SUPPORT_SYNCML )
+
+ /* If this is an embedded (not root) "DevInf" document, skip it */
+- if ((WBXML_STRCMP(localName, "DevInf") == 0) &&
++ if ((WBXML_STRCMP(localName, "syncml:devinf:DevInf") == 0) &&
+ (tree_ctx->current != NULL))
+ {
+ tree_ctx->skip_start = XML_GetCurrentByteIndex(tree_ctx->xml_parser);
+@@ -192,7 +192,7 @@
+ /* End of skipped node */
+
+ #if defined( WBXML_SUPPORT_SYNCML )
+- if (WBXML_STRCMP(localName, "DevInf") == 0) {
++ if (WBXML_STRCMP(localName, "syncml:devinf:DevInf") == 0) {
+ /* Get embedded DevInf Document */
+ devinf_doc = wbxml_buffer_create(tree_ctx->input_buff + tree_ctx->skip_start,
+ XML_GetCurrentByteIndex(tree_ctx->xml_parser) - tree_ctx->skip_start,
+@@ -210,6 +210,16 @@
+ return;
+ }
+
++ /* Add doctype to give the XML parser a chance
++ * SyncML 1.2 is downward compatible to older versions.
++ */
++ if (!wbxml_buffer_insert_cstr(devinf_doc, "<!DOCTYPE DevInf PUBLIC '-//SYNCML//DTD DevInf 1.2//EN' 'http://www.openmobilealliance.org/tech/DTD/OMA-SyncML-Device_Information-DTD-1.2.dtd' >\n", 0))
++ {
++ tree_ctx->error = WBXML_ERROR_NOT_ENOUGH_MEMORY;
++ wbxml_buffer_destroy(devinf_doc);
++ return;
++ }
++
+ WBXML_DEBUG((WBXML_PARSER, "\t DevInf Doc : '%s'", wbxml_buffer_get_cstr(devinf_doc)));
+
+ /* Parse 'DevInf' Document */
diff --git a/packages/opensync/wbxml2/06-no-install-docs.patch b/packages/opensync/wbxml2/06-no-install-docs.patch
new file mode 100644
index 0000000000..acfe692d90
--- /dev/null
+++ b/packages/opensync/wbxml2/06-no-install-docs.patch
@@ -0,0 +1,14 @@
+diff -urP wbxml2-0.9.2/Makefile.am wbxml2-0.9.2.x/Makefile.am
+--- wbxml2-0.9.2/Makefile.am 2006-07-11 14:47:43.000000000 +0300
++++ wbxml2-0.9.2.x/Makefile.am 2006-08-08 22:26:18.000000000 +0300
+@@ -24,10 +24,6 @@
+ TODO\
+ doxygen.h
+
+-install-data-local:
+- $(mkinstalldirs) $(DESTDIR)$(wbxmldocdir)/manual
+- cp -Rp doc/* $(DESTDIR)$(wbxmldocdir)/manual
+-
+ dist-bz2: distdir
+ sed -e "s/tar.gz/tar.bz2/g" $(distdir)/wbxml2.spec > $(distdir)/wbxml2.spec.aux
+ mv $(distdir)/wbxml2.spec.aux $(distdir)/wbxml2.spec
diff --git a/packages/opensync/wbxml2/07-current_attr_null.patch b/packages/opensync/wbxml2/07-current_attr_null.patch
new file mode 100644
index 0000000000..2b74f594d3
--- /dev/null
+++ b/packages/opensync/wbxml2/07-current_attr_null.patch
@@ -0,0 +1,22 @@
+--- wbxml2-0.9.2/src/wbxml_encoder.orig.c 2008-01-20 01:25:46.000000000 +0100
++++ wbxml2-0.9.2/src/wbxml_encoder.c 2008-01-20 01:26:25.000000000 +0100
+@@ -1875,6 +1875,9 @@
+ #if defined( WBXML_SUPPORT_SI )
+ case WBXML_LANG_SI10:
+ /* SI 1.0: Encode date for 'created' and 'si-expires' attributes */
++ if (encoder->current_attr == NULL)
++ break;
++
+ if ((encoder->current_attr->wbxmlCodePage == 0x00) &&
+ ((encoder->current_attr->wbxmlToken == 0x0a) || (encoder->current_attr->wbxmlToken == 0x10)))
+ {
+@@ -1886,6 +1889,9 @@
+ #if defined( WBXML_SUPPORT_EMN )
+ case WBXML_LANG_EMN10:
+ /* EMN 1.0: Encode date for 'timestamp' attribute */
++ if (encoder->current_attr == NULL)
++ break;
++
+ if ((encoder->current_attr->wbxmlCodePage == 0x00) && (encoder->current_attr->wbxmlToken == 0x05))
+ {
+ return wbxml_encode_datetime(encoder, buffer);
diff --git a/packages/opensync/wbxml2/08-maxsize-translation-table.patch b/packages/opensync/wbxml2/08-maxsize-translation-table.patch
new file mode 100644
index 0000000000..ebcda89c72
--- /dev/null
+++ b/packages/opensync/wbxml2/08-maxsize-translation-table.patch
@@ -0,0 +1,17 @@
+#libwbxml2-0: Size changed to MaxSize in OMA DS 1.2 DevInf
+#
+#The normale Size tag was changed to MaxSize in OMA DS 1.2 Device
+#Information. The number in the stringtable does not changed. So
+#the order looks a little bit "funny".
+
+--- src/wbxml_tables.c.orig 2008-09-01 15:05:22.000000000 +0200
++++ src/wbxml_tables.c 2008-09-01 15:05:58.000000000 +0200
+@@ -1891,7 +1891,7 @@
+ { "Rx", 0x00, 0x19 },
+ { "Rx-Pref", 0x00, 0x1a },
+ { "SharedMem", 0x00, 0x1b },
+- { "Size", 0x00, 0x1c },
++ { "MaxSize", 0x00, 0x1c },
+ { "SourceRef", 0x00, 0x1d },
+ { "SwV", 0x00, 0x1e },
+ { "SyncCap", 0x00, 0x1f },
diff --git a/packages/opensync/wbxml2_0.9.0.bb b/packages/opensync/wbxml2_0.9.0.bb
deleted file mode 100644
index 3f45b35711..0000000000
--- a/packages/opensync/wbxml2_0.9.0.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "parser for wbxml"
-LICENSE = "GPLv2"
-
-DEPENDS = "libxml2 sed-native"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/wbxmllib/${P}-src.tar.gz"
-
-inherit autotools pkgconfig
-
-do_configure_append() {
- sed -i s:-I/usr/include::g Makefile
- sed -i s:-I/usr/include::g */Makefile
-}
-
-do_stage() {
- autotools_stage_all
-}
-
-PACKAGES += "${PN}-tools"
-
-FILES_${PN}-tools = "${bindir}"
-FILES_${PN} = "${libdir}/*.so.*"
-
-
diff --git a/packages/opensync/wbxml2_0.9.2.bb b/packages/opensync/wbxml2_0.9.2.bb
new file mode 100644
index 0000000000..a45e1c6d66
--- /dev/null
+++ b/packages/opensync/wbxml2_0.9.2.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "WBXML parsing and encoding library"
+LICENSE = "LGPL"
+
+DEPENDS = "expat popt"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wbxmllib/${PN}-${PV}.tar.gz \
+ file://00-fix-includes.patch;patch=1 \
+ file://01-anonymous-support-and-misc-fixes.patch;patch=1 \
+ file://02-namespaces.patch;patch=1 \
+ file://04_saxlike_entity_parsing.patch;patch=1 \
+ file://05-syncml-fixes.patch;patch=1 \
+ file://06-no-install-docs.patch;patch=1 \
+ file://07-current_attr_null.patch;patch=1 \
+ file://08-maxsize-translation-table.patch;patch=1;pnum=0 \
+ "
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES += "${PN}-tools"
+
+FILES_${PN}-tools = "${bindir}"
+FILES_${PN} = "${libdir}/*.so.*"
+
+
+