wbxml2: update to version 0.9.2
authorJeremy Lainé <jeremy.laine@m4x.org>
Tue, 25 Nov 2008 07:49:36 +0000 (08:49 +0100)
committerJeremy Lainé <jeremy.laine@m4x.org>
Tue, 25 Nov 2008 07:49:36 +0000 (08:49 +0100)
* package latest upstream release
* fix description and license (LGPL, not GPLv2)
* apply patches included in Debian package

packages/opensync/wbxml2/00-fix-includes.patch [new file with mode: 0644]
packages/opensync/wbxml2/01-anonymous-support-and-misc-fixes.patch [new file with mode: 0644]
packages/opensync/wbxml2/02-namespaces.patch [new file with mode: 0644]
packages/opensync/wbxml2/04_saxlike_entity_parsing.patch [new file with mode: 0644]
packages/opensync/wbxml2/05-syncml-fixes.patch [new file with mode: 0644]
packages/opensync/wbxml2/06-no-install-docs.patch [new file with mode: 0644]
packages/opensync/wbxml2/07-current_attr_null.patch [new file with mode: 0644]
packages/opensync/wbxml2/08-maxsize-translation-table.patch [new file with mode: 0644]
packages/opensync/wbxml2_0.9.0.bb [deleted file]
packages/opensync/wbxml2_0.9.2.bb [new file with mode: 0644]

diff --git a/packages/opensync/wbxml2/00-fix-includes.patch b/packages/opensync/wbxml2/00-fix-includes.patch
new file mode 100644 (file)
index 0000000..8fe415d
--- /dev/null
@@ -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 (file)
index 0000000..225c581
--- /dev/null
@@ -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 (file)
index 0000000..3c8efcb
--- /dev/null
@@ -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 (file)
index 0000000..43d915b
--- /dev/null
@@ -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 (file)
index 0000000..855b100
--- /dev/null
@@ -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 (file)
index 0000000..acfe692
--- /dev/null
@@ -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 (file)
index 0000000..2b74f59
--- /dev/null
@@ -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 (file)
index 0000000..ebcda89
--- /dev/null
@@ -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 (file)
index 3f45b35..0000000
+++ /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 (file)
index 0000000..a45e1c6
--- /dev/null
@@ -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.*"
+
+
+