]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java
Add many datum and datum size checking in PCD building tools, These checking work...
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / Token.java
index 62e2be5cc969a80911e94d83b78a8cb9a7a11138..f5765e1d408fa1e9b7ef2ffc8452235bed26f34d 100644 (file)
@@ -15,11 +15,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/  \r
 package org.tianocore.build.pcd.entity;\r
 \r
+import java.math.BigInteger;\r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.List;\r
-import java.util.UUID;\r
 import java.util.Map;\r
-import java.util.HashMap;\r
+import java.util.UUID;\r
 \r
 import org.tianocore.build.pcd.action.ActionMessage;\r
 import org.tianocore.build.pcd.exception.EntityException;\r
@@ -552,49 +553,76 @@ public class Token {
             dynamicValue = getDefaultSku();\r
             switch (dynamicValue.type) {\r
             case HII_TYPE:\r
-                try {\r
-                    value = Integer.decode(dynamicValue.hiiDefaultValue);\r
-                } catch (NumberFormatException nfEx) {\r
-                    isInteger = false;\r
-                }\r
-                \r
-                if (isInteger && (value == 0)) {\r
-                    return false;\r
-                } else {\r
-                    return true;\r
-                }\r
-\r
+                return !isValidNullValue(dynamicValue.hiiDefaultValue);\r
             case VPD_TYPE:\r
                 return false;\r
-\r
             case DEFAULT_TYPE:\r
-                try{\r
-                    value = Integer.decode(dynamicValue.value);\r
-                } catch (NumberFormatException nfEx) {\r
-                    isInteger = false;\r
-                }\r
+                return !isValidNullValue(dynamicValue.value);\r
+            }\r
+        }\r
+\r
+        return false;\r
+    }\r
 \r
-                if (isInteger && (value == 0)) {\r
-                    return false;\r
+    public boolean isValidNullValue(String judgedValue) {\r
+        int         intValue;\r
+        BigInteger  bigIntValue;\r
+\r
+        switch (datumType) {\r
+        case UINT8:\r
+        case UINT16:\r
+        case UINT32:\r
+            intValue = Integer.decode(judgedValue);\r
+            if (intValue == 0) {\r
+                return true;\r
+            }\r
+            break;\r
+        case UINT64:\r
+            if (judgedValue.length() > 2){\r
+                if ((judgedValue.charAt(0) == '0') && \r
+                    ((judgedValue.charAt(1) == 'x') ||\r
+                     (judgedValue.charAt(1) == 'X'))) {\r
+                    bigIntValue = new BigInteger(judgedValue.substring(2, judgedValue.length()),  16);\r
+                    if (bigIntValue.bitCount() == 0) {\r
+                        return true;\r
+                    }\r
                 } else {\r
+                    bigIntValue = new BigInteger(judgedValue);\r
+                    if (bigIntValue.bitCount() == 0) {\r
+                        return true;\r
+                    }\r
+                }\r
+            } else  {\r
+                bigIntValue = new BigInteger(judgedValue);\r
+                if (bigIntValue.bitCount() == 0) {\r
                     return true;\r
                 }\r
-\r
+            }\r
+            break;\r
+        case BOOLEAN:\r
+            if (judgedValue.equalsIgnoreCase("false")) {\r
+                return true;\r
+            }\r
+            break;\r
+        case POINTER:\r
+            if (judgedValue.equalsIgnoreCase("")        ||\r
+                judgedValue.equalsIgnoreCase("\"\"")   ||\r
+                judgedValue.equalsIgnoreCase("L\"\"")   ||\r
+                (judgedValue.length() == 0)             ||\r
+                judgedValue.equalsIgnoreCase("{}")) {\r
+                return true;\r
             }\r
         }\r
-\r
         return false;\r
     }\r
 \r
-    //\r
-    // TODO: Need scott's confirmation\r
-    // \r
     public boolean isStringType () {\r
         String str = getDefaultSku().value;\r
 \r
-        if (datumType == Token.DATUM_TYPE.POINTER &&\r
-            str.startsWith("L\"") && \r
-            str.endsWith("\"")) {\r
+        //\r
+        // BUGBUG: need scott confirmation.\r
+        // \r
+        if (datumType == Token.DATUM_TYPE.POINTER) {\r
             return true;\r
         }\r
 \r