]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/ifacecheck/src/xmlparser.cpp
OSX reshuffling
[wxWidgets.git] / utils / ifacecheck / src / xmlparser.cpp
index 1f2b35da7966cf30b07bb993254322838a8f4332..7b29c794ff21643e8d27cad9d54d6499b71d8b5c 100644 (file)
@@ -484,10 +484,10 @@ typedef std::map<unsigned long, toResolveTypeItem> wxToResolveTypeHashMap;
 bool getID(unsigned long *id, const wxStringCharType* str)
 {
     wxStringCharType *end;
-#if wxUSE_UNICODE_UTF8
-    unsigned long val = strtoul(str+1, &end, GCCXML_BASE);
-#else
+#if wxUSE_UNICODE_WCHAR
     unsigned long val = wcstoul(str+1, &end, GCCXML_BASE);
+#else
+    unsigned long val = strtoul(str+1, &end, GCCXML_BASE);
 #endif
 
     // return true only if scan was stopped by the terminating NUL and
@@ -504,10 +504,10 @@ bool getID(unsigned long *id, const wxStringCharType* str)
 // in nodes like <Class> ones... i.e. numeric values separed by " _" token
 bool getMemberIDs(wxClassMemberIdHashMap* map, wxClass* p, const wxStringCharType* str)
 {
-#if wxUSE_UNICODE_UTF8
-    size_t len = strlen(str);
-#else
+#if wxUSE_UNICODE_WCHAR
     size_t len = wcslen(str);
+#else
+    size_t len = strlen(str);
 #endif
 
     if (len == 0 || str[0] != '_')
@@ -520,10 +520,10 @@ bool getMemberIDs(wxClassMemberIdHashMap* map, wxClass* p, const wxStringCharTyp
     while (curpos < end)
     {
         // curpos always points to the underscore of the next token to parse:
-#if wxUSE_UNICODE_UTF8
-        unsigned long id = strtoul(curpos+1, &nexttoken, GCCXML_BASE);
-#else
+#if wxUSE_UNICODE_WCHAR
         unsigned long id = wcstoul(curpos+1, &nexttoken, GCCXML_BASE);
+#else
+        unsigned long id = strtoul(curpos+1, &nexttoken, GCCXML_BASE);
 #endif
         if ( *nexttoken != ' ' || errno == ERANGE || errno == EINVAL )
             return false;
@@ -563,6 +563,31 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
         return false;
     }
 
+    wxString version = doc.GetRoot()->GetAttribute("cvs_revision");
+    bool old = false;
+
+#define MIN_REVISION  120
+
+    if (!version.StartsWith("1."))
+        old = true;
+    if (!old)
+    {
+        unsigned long rev = 0;
+        if (!version.Mid(2).ToULong(&rev))
+            old = true;
+        else
+            if (rev < MIN_REVISION)
+                old = true;
+    }
+
+    if (old)
+    {
+        LogError("The version of GCC-XML used for the creation of %s is too old; "
+                 "the cvs_revision attribute of the root node reports '%s', "
+                 "minimal required is 1.%d.", filename, version, MIN_REVISION);
+        return false;
+    }
+
     wxToResolveTypeHashMap toResolveTypes;
     wxClassMemberIdHashMap members;
     wxTypeIdHashMap types;
@@ -1076,6 +1101,13 @@ bool wxXmlDoxygenInterface::Parse(const wxString& filename)
         return false;
     }
 
+    /*
+        NB: we may need in future to do a version-check here if the
+            format of the XML generated by doxygen changes.
+            For now (doxygen version 1.5.5), this check is not required
+            since AFAIK the XML format never changed since it was introduced.
+    */
+
     m_classes.Alloc(ESTIMATED_NUM_CLASSES);
 
     // process files referenced by this index file