From a6963d03a112ede0dedd2cfde15bc692230724c7 Mon Sep 17 00:00:00 2001
From: Khaled Noaman <knoaman@apache.org>
Date: Thu, 4 Apr 2002 14:42:41 +0000
Subject: [PATCH] Change min/maxOccurs from unsigned int to int.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@173611 13f79535-47bb-0310-9956-ffa450edef68
---
 .../validators/common/ContentSpecNode.hpp     | 23 +++++++++++--------
 .../validators/schema/TraverseSchema.cpp      | 22 ++++++++++++++----
 2 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/src/xercesc/validators/common/ContentSpecNode.hpp b/src/xercesc/validators/common/ContentSpecNode.hpp
index 52a0e1353..90a59707c 100644
--- a/src/xercesc/validators/common/ContentSpecNode.hpp
+++ b/src/xercesc/validators/common/ContentSpecNode.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/04/04 14:42:41  knoaman
+ * Change min/maxOccurs from unsigned int to int.
+ *
  * Revision 1.2  2002/03/21 15:41:48  knoaman
  * Move behavior from TraverseSchema.
  *
@@ -214,8 +217,8 @@ public :
     NodeTypes getType() const;
     ContentSpecNode* orphanFirst();
     ContentSpecNode* orphanSecond();
-    unsigned int getMinOccurs() const;
-    unsigned int getMaxOccurs() const;
+    int getMinOccurs() const;
+    int getMaxOccurs() const;
     bool isFirstAdopted() const;
     bool isSecondAdopted() const;
 
@@ -227,8 +230,8 @@ public :
     void setFirst(ContentSpecNode* const toAdopt);
     void setSecond(ContentSpecNode* const toAdopt);
     void setType(const NodeTypes type);
-    void setMinOccurs(unsigned int min);
-    void setMaxOccurs(unsigned int max);
+    void setMinOccurs(int min);
+    void setMaxOccurs(int max);
     void setAdoptFirst(bool adoptFirst);
     void setAdoptSecond(bool adoptSecond);
 
@@ -291,8 +294,8 @@ private :
     NodeTypes           fType;
     bool                fAdoptFirst;
     bool                fAdoptSecond;
-    unsigned int        fMinOccurs;
-    unsigned int        fMaxOccurs;
+    int                 fMinOccurs;
+    int                 fMaxOccurs;
 };
 
 // ---------------------------------------------------------------------------
@@ -436,12 +439,12 @@ inline ContentSpecNode* ContentSpecNode::orphanSecond()
     return retNode;
 }
 
-inline unsigned int ContentSpecNode::getMinOccurs() const
+inline int ContentSpecNode::getMinOccurs() const
 {
     return fMinOccurs;
 }
 
-inline unsigned int ContentSpecNode::getMaxOccurs() const
+inline int ContentSpecNode::getMaxOccurs() const
 {
     return fMaxOccurs;
 }
@@ -487,12 +490,12 @@ inline void ContentSpecNode::setType(const NodeTypes type)
     fType = type;
 }
 
-inline void ContentSpecNode::setMinOccurs(unsigned int min)
+inline void ContentSpecNode::setMinOccurs(int min)
 {
     fMinOccurs = min;
 }
 
-inline void ContentSpecNode::setMaxOccurs(unsigned int max)
+inline void ContentSpecNode::setMaxOccurs(int max)
 {
     fMaxOccurs = max;
 }
diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index 88923f55f..e7dbf0da0 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -5314,10 +5314,10 @@ void TraverseSchema::processAttributeDeclRef(const IDOM_Element* const elem,
 
 void TraverseSchema::checkMinMax(ContentSpecNode* const specNode,
                                  const IDOM_Element* const elem,
-                            const int allContextFlag) {
+                                 const int allContextFlag) {
 
-    unsigned int minOccurs = 1;
-    unsigned int maxOccurs = 1;
+    int minOccurs = 1;
+    int maxOccurs = 1;
     const XMLCh* minOccursStr = getElementAttValue(elem, SchemaSymbols::fgATT_MINOCCURS, true);
     const XMLCh* maxOccursStr = getElementAttValue(elem, SchemaSymbols::fgATT_MAXOCCURS, true);
 
@@ -5326,7 +5326,13 @@ void TraverseSchema::checkMinMax(ContentSpecNode* const specNode,
             minOccurs = specNode->getMinOccurs();
     }
     else {
-        XMLString::textToBin(minOccursStr, minOccurs);
+        try {
+            minOccurs = XMLString::parseInt(minOccursStr);
+        }
+        catch (...) {
+            minOccurs = 1;
+        }
+
         if (specNode)
             specNode->setMinOccurs(minOccurs);
     }
@@ -5344,7 +5350,13 @@ void TraverseSchema::checkMinMax(ContentSpecNode* const specNode,
                 maxOccurs = specNode->getMaxOccurs();
         }
         else {
-            XMLString::textToBin(maxOccursStr, maxOccurs);
+            try {
+                maxOccurs = XMLString::parseInt(maxOccursStr);
+            }
+            catch(...) {
+                maxOccurs = minOccurs;
+            }
+
             if (specNode)
                 specNode->setMaxOccurs(maxOccurs);
         }
-- 
GitLab