X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FSource%2FGenBuild%2Forg%2Ftianocore%2Fbuild%2Fpcd%2Fentity%2FToken.java;h=f5765e1d408fa1e9b7ef2ffc8452235bed26f34d;hp=62e2be5cc969a80911e94d83b78a8cb9a7a11138;hb=6f7e61a03a654ad08ba198432c2ed196a9df0c3e;hpb=59a372594cd96dea47d811c81e56c02e698a703e diff --git a/Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java b/Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java index 62e2be5cc9..f5765e1d40 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java +++ b/Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java @@ -15,11 +15,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ package org.tianocore.build.pcd.entity; +import java.math.BigInteger; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.UUID; import java.util.Map; -import java.util.HashMap; +import java.util.UUID; import org.tianocore.build.pcd.action.ActionMessage; import org.tianocore.build.pcd.exception.EntityException; @@ -552,49 +553,76 @@ public class Token { dynamicValue = getDefaultSku(); switch (dynamicValue.type) { case HII_TYPE: - try { - value = Integer.decode(dynamicValue.hiiDefaultValue); - } catch (NumberFormatException nfEx) { - isInteger = false; - } - - if (isInteger && (value == 0)) { - return false; - } else { - return true; - } - + return !isValidNullValue(dynamicValue.hiiDefaultValue); case VPD_TYPE: return false; - case DEFAULT_TYPE: - try{ - value = Integer.decode(dynamicValue.value); - } catch (NumberFormatException nfEx) { - isInteger = false; - } + return !isValidNullValue(dynamicValue.value); + } + } + + return false; + } - if (isInteger && (value == 0)) { - return false; + public boolean isValidNullValue(String judgedValue) { + int intValue; + BigInteger bigIntValue; + + switch (datumType) { + case UINT8: + case UINT16: + case UINT32: + intValue = Integer.decode(judgedValue); + if (intValue == 0) { + return true; + } + break; + case UINT64: + if (judgedValue.length() > 2){ + if ((judgedValue.charAt(0) == '0') && + ((judgedValue.charAt(1) == 'x') || + (judgedValue.charAt(1) == 'X'))) { + bigIntValue = new BigInteger(judgedValue.substring(2, judgedValue.length()), 16); + if (bigIntValue.bitCount() == 0) { + return true; + } } else { + bigIntValue = new BigInteger(judgedValue); + if (bigIntValue.bitCount() == 0) { + return true; + } + } + } else { + bigIntValue = new BigInteger(judgedValue); + if (bigIntValue.bitCount() == 0) { return true; } - + } + break; + case BOOLEAN: + if (judgedValue.equalsIgnoreCase("false")) { + return true; + } + break; + case POINTER: + if (judgedValue.equalsIgnoreCase("") || + judgedValue.equalsIgnoreCase("\"\"") || + judgedValue.equalsIgnoreCase("L\"\"") || + (judgedValue.length() == 0) || + judgedValue.equalsIgnoreCase("{}")) { + return true; } } - return false; } - // - // TODO: Need scott's confirmation - // public boolean isStringType () { String str = getDefaultSku().value; - if (datumType == Token.DATUM_TYPE.POINTER && - str.startsWith("L\"") && - str.endsWith("\"")) { + // + // BUGBUG: need scott confirmation. + // + if (datumType == Token.DATUM_TYPE.POINTER) { return true; }