Allow compilation with gcc -pedantic-errors -ansi
-------------------------------------------------

                 Key: XERCESC-1619
                 URL: http://issues.apache.org/jira/browse/XERCESC-1619
             Project: Xerces-C++
          Issue Type: Improvement
          Components: Build
    Affects Versions: Nightly build (please specify the date)
         Environment: Linux (SVN revision 422672)
            Reporter: Daniel Burr
            Priority: Minor


First problem is a couple of stray semi-colons:
--- src/xercesc/dom/impl/DOMLSSerializerImpl.hpp        (revision 422672)
+++ src/xercesc/dom/impl/DOMLSSerializerImpl.hpp        (working copy)
@@ -214,12 +214,12 @@
                                     , bool      val)
 {
     (val)? fFeatures |= (1<<featureId) : fFeatures &= ~(1<<featureId);
-};
+}
 
 inline bool DOMLSSerializerImpl::getFeature(const int featureId) const
 {
     return ((fFeatures & ( 1<<featureId )) != 0) ? true : false;
-};
+}
 
 inline void DOMLSSerializerImpl::setURCharRef()
 {


gcc complains about a missing return value here:
--- src/xercesc/util/XMLNumber.cpp      (revision 422672)
+++ src/xercesc/util/XMLNumber.cpp      (working copy)
@@ -88,7 +88,7 @@
         return 0;
         break;
     }
-
+    return NULL;
 }

Sometimes TOP_LEVEL_SCOPE is passed as argument 3 of 
RefHash3KeysIdPool::getByKey() which is signed, causing gcc to complain that 
there is an implicit conversion from unsigned to signed.  Fix:
 --- src/xercesc/validators/common/Grammar.hpp  (revision 422672)
+++ src/xercesc/validators/common/Grammar.hpp   (working copy)
@@ -67,7 +67,7 @@
        // These are well-known values that must simply be larger
        // than any reasonable scope
                 UNKNOWN_SCOPE          = UINT_MAX - 0
-          , TOP_LEVEL_SCOPE    = UINT_MAX - 1
+          , TOP_LEVEL_SCOPE    = INT_MAX - 1
     };
 
     // -----------------------------------------------------------------------


Lastly, C99 can not have variable sized arrays allocated on the stack:
--- src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp      
(revision 422672)
+++ src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp      
(working copy)
@@ -239,7 +239,9 @@
     if (ch <= 0x7F)
         return toupper(ch);
 
-    char    wcbuf[fUChSize * 2];
+    char* wcbuf = new char[fUChSize << 1];
+    if(!wcbuf) return 0;
+
     xmlChToMbc (ch, wcbuf);
 
     char    tmpArr[4];
@@ -250,8 +252,11 @@
 
     ICONV_LOCK;
     if (::iconv (fCDTo, &ptr, &len,
-         &pTmpArr, &bLen) == (size_t) -1)
-    return 0;
+         &pTmpArr, &bLen) == (size_t) -1) {
+        delete[] wcbuf;
+        return 0;
+    }
+
     tmpArr[1] = toupper (*((unsigned char *)tmpArr));
     *tmpArr = tmpArr[1];
     len = 1;
@@ -259,9 +264,12 @@
     bLen = fUChSize;
     ptr = tmpArr;
     if (::iconv (fCDFrom, &ptr, &len,
-         &pTmpArr, &bLen) == (size_t) -1)
-    return 0;
+         &pTmpArr, &bLen) == (size_t) -1) {
+        delete[] wcbuf;
+        return 0;
+    }
     mbcToXMLCh (wcbuf, (XMLCh*) &ch);
+    delete[] wcbuf;
     return ch;
 }
 
@@ -271,7 +279,9 @@
     if (ch <= 0x7F)
         return tolower(ch);
 
-    char    wcbuf[fUChSize * 2];
+    char* wcbuf = new char[fUChSize << 1];
+    if(!wcbuf) return 0;
+
     xmlChToMbc (ch, wcbuf);
 
     char    tmpArr[4];
@@ -282,8 +292,10 @@
 
     ICONV_LOCK;
     if (::iconv (fCDTo, &ptr, &len,
-         &pTmpArr, &bLen) == (size_t) -1)
-    return 0;
+         &pTmpArr, &bLen) == (size_t) -1) {
+        delete[] wcbuf;
+        return 0;
+    }
     tmpArr[1] = tolower (*((unsigned char*)tmpArr));
     *tmpArr = tmpArr[1];
     len = 1;
@@ -291,9 +303,12 @@
     bLen = fUChSize;
     ptr = tmpArr;
     if (::iconv (fCDFrom, &ptr, &len,
-         &pTmpArr, &bLen) == (size_t) -1)
-    return 0;
+         &pTmpArr, &bLen) == (size_t) -1) {
+        delete[] wcbuf;
+        return 0;
+    }
     mbcToXMLCh (wcbuf, (XMLCh*) &ch);
+    delete[] wcbuf;
     return ch;
 }
 
@@ -303,8 +318,9 @@
     if (toCheck <= 0x7F)
         return isspace(toCheck);
 
-    char    wcbuf[fUChSize * 2];
     char    tmpArr[4];
+    char* wcbuf = new char[fUChSize << 1];
+    if(!wcbuf) return 0;
 
     xmlChToMbc (toCheck, wcbuf);
     char*    ptr = wcbuf;
@@ -315,9 +331,12 @@
     {
         ICONV_LOCK;
         if (::iconv (fCDTo, &ptr, &len,
-                 &pTmpArr, &bLen) == (size_t) -1)
+                 &pTmpArr, &bLen) == (size_t) -1) {
+            delete[] wcbuf;
             return 0;
+        }
     }
+    delete[] wcbuf;
     return isspace(*tmpArr);
 }
 
@@ -1153,7 +1172,9 @@
     //  If the passed value is really a surrogate embedded together, then
     //  we need to break it out into its two chars. Else just one.
     //
-    char        srcBuf[2 * uChSize()];
+    char* srcBuf = new char[uChSize() << 1];
+    if(!srcBuf) return 0;
+
     unsigned int    srcCount = 1;
     if (toCheck & 0xFFFF0000) {
         XMLCh    ch1 = (toCheck >> 10) + 0xD800;
@@ -1168,6 +1189,7 @@
     char*    pTmpBuf = tmpBuf;
 
     size_t    rc = iconvTo( srcBuf, &len, &pTmpBuf, 64);
+    delete[] srcBuf;
     return (rc != (size_t)-1) && (len == 0);
 }
 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to