- Version = *(UINT32 *) (Iterator + 1);\r
- Status = Push (Version, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- Iterator = Iterator + sizeof (UINT32);\r
- break;\r
- case EFI_FMP_DEP_VERSION_STR:\r
- Iterator += AsciiStrnLenS ((CHAR8 *) Iterator, DependenciesSize - (Iterator - Dependencies->Dependencies));\r
- if (Iterator == (UINT8 *) Dependencies->Dependencies + DependenciesSize) {\r
- DEBUG ((DEBUG_ERROR, "EvaluateDependency: STRING extends beyond end of dependency expression!\n"));\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_VERSION_STR_BEYOND_DEPEX;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_AND:\r
- Status = Pop (&Element1, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Push (Element1.Value.Boolean & Element2.Value.Boolean, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_OR:\r
- Status = Pop (&Element1, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop(&Element2, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Push (Element1.Value.Boolean | Element2.Value.Boolean, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_NOT:\r
- Status = Pop (&Element1, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Push (!(Element1.Value.Boolean), BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_TRUE:\r
- Status = Push (TRUE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_FALSE:\r
- Status = Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_EQ:\r
- Status = Pop (&Element1, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = (Element1.Value.Version == Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_GT:\r
- Status = Pop (&Element1, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = (Element1.Value.Version > Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_GTE:\r
- Status = Pop (&Element1, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = (Element1.Value.Version >= Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_LT:\r
- Status = Pop (&Element1, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus= LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = (Element1.Value.Version < Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_LTE:\r
- Status = Pop (&Element1, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = Pop (&Element2, VersionType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
- goto Error;\r
- }\r
- Status = (Element1.Value.Version <= Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
- goto Error;\r
- }\r
- break;\r
- case EFI_FMP_DEP_END:\r
- Status = Pop (&Element1, BooleanType);\r
- if (EFI_ERROR (Status)) {\r
- LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ if (Index == FmpVersionsCount) {\r
+ DEBUG ((DEBUG_ERROR, "EvaluateDependency: %g is not found!\n", &ImageTypeId));\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_FMP_NOT_FOUND;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_PUSH_VERSION:\r
+ if (Iterator + sizeof (UINT32) >= (UINT8 *)Dependencies->Dependencies + DependenciesSize ) {\r
+ DEBUG ((DEBUG_ERROR, "EvaluateDependency: VERSION extends beyond end of dependency expression!\n"));\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_VERSION_BEYOND_DEPEX;\r
+ goto Error;\r
+ }\r
+\r
+ Version = *(UINT32 *)(Iterator + 1);\r
+ Status = Push (Version, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Iterator = Iterator + sizeof (UINT32);\r
+ break;\r
+ case EFI_FMP_DEP_VERSION_STR:\r
+ Iterator += AsciiStrnLenS ((CHAR8 *)Iterator, DependenciesSize - (Iterator - Dependencies->Dependencies));\r
+ if (Iterator == (UINT8 *)Dependencies->Dependencies + DependenciesSize) {\r
+ DEBUG ((DEBUG_ERROR, "EvaluateDependency: STRING extends beyond end of dependency expression!\n"));\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_VERSION_STR_BEYOND_DEPEX;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_AND:\r
+ Status = Pop (&Element1, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Push (Element1.Value.Boolean & Element2.Value.Boolean, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_OR:\r
+ Status = Pop (&Element1, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Push (Element1.Value.Boolean | Element2.Value.Boolean, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_NOT:\r
+ Status = Pop (&Element1, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Push (!(Element1.Value.Boolean), BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_TRUE:\r
+ Status = Push (TRUE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_FALSE:\r
+ Status = Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_EQ:\r
+ Status = Pop (&Element1, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = (Element1.Value.Version == Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_GT:\r
+ Status = Pop (&Element1, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = (Element1.Value.Version > Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_GTE:\r
+ Status = Pop (&Element1, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = (Element1.Value.Version >= Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_LT:\r
+ Status = Pop (&Element1, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = (Element1.Value.Version < Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_LTE:\r
+ Status = Pop (&Element1, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = Pop (&Element2, VersionType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ Status = (Element1.Value.Version <= Element2.Value.Version) ? Push (TRUE, BooleanType) : Push (FALSE, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_PUSH_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ break;\r
+ case EFI_FMP_DEP_END:\r
+ Status = Pop (&Element1, BooleanType);\r
+ if (EFI_ERROR (Status)) {\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_POP_FAILURE;\r
+ goto Error;\r
+ }\r
+\r
+ return Element1.Value.Boolean;\r
+ default:\r
+ DEBUG ((DEBUG_ERROR, "EvaluateDependency: Unknown Opcode - %02x!\n", *Iterator));\r
+ LocalLastAttemptStatus = LAST_ATTEMPT_STATUS_DEPENDENCY_LIB_ERROR_UNKNOWN_OPCODE;\r