Propose to use a set not a list when the data is unordered and unique names of functions.
With that: reviewed-by:Jaben.carsey <[email protected]> Sent from my iPad > On Oct 16, 2018, at 7:25 PM, Yonghong Zhu <[email protected]> wrote: > > From: Hess Chen <[email protected]> > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Hess Chen <[email protected]> > --- > BaseTools/Source/Python/Ecc/Check.py | 60 ++++++++++++++++++++++++++++ > BaseTools/Source/Python/Ecc/Configuration.py | 3 ++ > BaseTools/Source/Python/Ecc/EccToolError.py | 2 + > BaseTools/Source/Python/Ecc/config.ini | 2 + > 4 files changed, 67 insertions(+) > > diff --git a/BaseTools/Source/Python/Ecc/Check.py > b/BaseTools/Source/Python/Ecc/Check.py > index eb086362bd..3baf81fa44 100644 > --- a/BaseTools/Source/Python/Ecc/Check.py > +++ b/BaseTools/Source/Python/Ecc/Check.py > @@ -270,6 +270,66 @@ class Check(object): > self.FunctionLayoutCheckPrototype() > self.FunctionLayoutCheckBody() > self.FunctionLayoutCheckLocalVariable() > + self.FunctionLayoutCheckDeprecated() > + > + # To check if the deprecated functions are used > + def FunctionLayoutCheckDeprecated(self): > + if EccGlobalData.gConfig.CFunctionLayoutCheckNoDeprecated == '1' or > EccGlobalData.gConfig.CFunctionLayoutCheckAll == '1' or > EccGlobalData.gConfig.CheckAll == '1': > + EdkLogger.quiet("Checking function no deprecated one being used > ...") > + > + DeprecatedFunctionList = ['UnicodeValueToString', > + 'AsciiValueToString', > + 'StrCpy', > + 'StrnCpy', > + 'StrCat', > + 'StrnCat', > + 'UnicodeStrToAsciiStr', > + 'AsciiStrCpy', > + 'AsciiStrnCpy', > + 'AsciiStrCat', > + 'AsciiStrnCat', > + 'AsciiStrToUnicodeStr', > + 'PcdSet8', > + 'PcdSet16', > + 'PcdSet32', > + 'PcdSet64', > + 'PcdSetPtr', > + 'PcdSetBool', > + 'PcdSetEx8', > + 'PcdSetEx16', > + 'PcdSetEx32', > + 'PcdSetEx64', > + 'PcdSetExPtr', > + 'PcdSetExBool', > + 'LibPcdSet8', > + 'LibPcdSet16', > + 'LibPcdSet32', > + 'LibPcdSet64', > + 'LibPcdSetPtr', > + 'LibPcdSetBool', > + 'LibPcdSetEx8', > + 'LibPcdSetEx16', > + 'LibPcdSetEx32', > + 'LibPcdSetEx64', > + 'LibPcdSetExPtr', > + 'LibPcdSetExBool', > + 'GetVariable', > + 'GetEfiGlobalVariable', > + ] > + > + for IdentifierTable in EccGlobalData.gIdentifierTableList: > + SqlCommand = """select ID, Name, BelongsToFile from %s > + where Model = %s """ % (IdentifierTable, > MODEL_IDENTIFIER_FUNCTION_CALLING) > + RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) > + for Record in RecordSet: > + for Key in DeprecatedFunctionList: > + if Key == Record[1]: > + if not > EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE, > Key): > + OtherMsg = 'The function [%s] is deprecated > which should NOT be used' % Key > + > EccGlobalData.gDb.TblReport.Insert(ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE, > + > OtherMsg=OtherMsg, > + > BelongsToTable=IdentifierTable, > + > BelongsToItem=Record[0]) > > def WalkTree(self): > IgnoredPattern = c.GetIgnoredDirListPattern() > diff --git a/BaseTools/Source/Python/Ecc/Configuration.py > b/BaseTools/Source/Python/Ecc/Configuration.py > index c19a3990c7..8f6886169c 100644 > --- a/BaseTools/Source/Python/Ecc/Configuration.py > +++ b/BaseTools/Source/Python/Ecc/Configuration.py > @@ -34,6 +34,7 @@ _ConfigFileToInternalTranslation = { > "CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody", > "CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName", > > "CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype", > + "CFunctionLayoutCheckNoDeprecated":"CFunctionLayoutCheckNoDeprecated", > > "CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable", > "CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic", > > "CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier", > @@ -242,6 +243,8 @@ class Configuration(object): > self.CFunctionLayoutCheckNoInitOfVariable = 1 > # Check whether no use of STATIC for functions > self.CFunctionLayoutCheckNoStatic = 1 > + # Check whether no use of Deprecated functions > + self.CFunctionLayoutCheckNoDeprecated = 1 > > ## Include Files Checking > self.IncludeFileCheckAll = 0 > diff --git a/BaseTools/Source/Python/Ecc/EccToolError.py > b/BaseTools/Source/Python/Ecc/EccToolError.py > index e327a7888d..7663e90d7e 100644 > --- a/BaseTools/Source/Python/Ecc/EccToolError.py > +++ b/BaseTools/Source/Python/Ecc/EccToolError.py > @@ -47,6 +47,7 @@ ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE = 5007 > ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC = 5008 > ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2 = 5009 > ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3 = 5010 > +ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE = 5011 > > ERROR_INCLUDE_FILE_CHECK_ALL = 6000 > ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 = 6001 > @@ -146,6 +147,7 @@ gEccErrorMessage = { > ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION : "The data declarations > should be the first code in a module", > ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE : "There should be no > initialization of a variable as part of its declaration", > ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC : "There should be no use of > STATIC for functions", > + ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE : "The deprecated function > should NOT be used", > > ERROR_INCLUDE_FILE_CHECK_ALL : "", > ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 : "All include file contents > should be guarded by a #ifndef statement.", > diff --git a/BaseTools/Source/Python/Ecc/config.ini > b/BaseTools/Source/Python/Ecc/config.ini > index 00c98c6232..663ae293bd 100644 > --- a/BaseTools/Source/Python/Ecc/config.ini > +++ b/BaseTools/Source/Python/Ecc/config.ini > @@ -134,6 +134,8 @@ CFunctionLayoutCheckDataDeclaration = 1 > CFunctionLayoutCheckNoInitOfVariable = 1 > # Check whether no use of STATIC for functions > CFunctionLayoutCheckNoStatic = 1 > +# Check whether no use of Deprecated functions > +CFunctionLayoutCheckNoDeprecated = 1 > > # > # Include Files Checking > -- > 2.14.2.windows.2 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

