Uploaded image for project: 'Xerces-C++'
  1. Xerces-C++
  2. XERCESC-1619

Allow compilation with gcc -pedantic-errors -ansi

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • None
    • Build
    • None
    • Linux (SVN revision 422672)

    Description

      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); }

      Attachments

        Activity

          People

            amassari Alberto Massari
            dburr Daniel Burr
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: