break;\r
\r
default:\r
- return EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
UnicodeSPrint (Buffer, BufferSize, PrintFormat, Value.Value.u64);\r
String = Buffer;\r
break;\r
\r
default:\r
- return EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
\r
Result->Type = EFI_IFR_TYPE_STRING;\r
}\r
\r
if (Value.Type >= EFI_IFR_TYPE_OTHER && Value.Type != EFI_IFR_TYPE_BUFFER) {\r
- return EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
\r
Status = EFI_SUCCESS;\r
} else if (Value.Type == EFI_IFR_TYPE_BUFFER) {\r
if (Value.BufferLen > 8) {\r
FreePool (Value.Buffer);\r
- return EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
Result->Value.u64 = *(UINT64*) Value.Buffer;\r
FreePool (Value.Buffer);\r
Status = EFI_SUCCESS;\r
ZeroMem (Value, sizeof (Value));\r
\r
- for (Index = 0; Index < 2; Index++) {\r
- Status = PopExpression (&Value[Index]);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
+ Status = PopExpression (&Value[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+\r
+ Status = PopExpression (&Value[1]);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
\r
+ for (Index = 0; Index < 2; Index++) {\r
if (Value[Index].Type != EFI_IFR_TYPE_STRING && Value[Index].Type != EFI_IFR_TYPE_BUFFER) {\r
- Status = EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
goto Done;\r
}\r
\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_VALUE Value;\r
+ EFI_HII_VALUE Value[2];\r
CHAR16 *String[2];\r
UINTN Index;\r
\r
String[0] = NULL;\r
String[1] = NULL;\r
Status = EFI_SUCCESS;\r
- for (Index = 0; Index < 2; Index++) {\r
- Status = PopExpression (&Value);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
+ ZeroMem (Value, sizeof (Value));\r
+\r
+ Status = PopExpression (&Value[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+\r
+ Status = PopExpression (&Value[1]);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
\r
- if (Value.Type != EFI_IFR_TYPE_STRING) {\r
- Status = EFI_UNSUPPORTED;\r
+ for (Index = 0; Index < 2; Index++) {\r
+ if (Value[Index].Type != EFI_IFR_TYPE_STRING) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
goto Done;\r
}\r
\r
- String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);\r
+ String[Index] = GetToken (Value[Index].Value.string, FormSet->HiiHandle);\r
if (String [Index] == NULL) {\r
Status = EFI_NOT_FOUND;\r
goto Done;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_VALUE Value;\r
+ EFI_HII_VALUE Value[3];\r
CHAR16 *String[2];\r
UINTN Base;\r
CHAR16 *StringPtr;\r
UINTN Index;\r
\r
+ ZeroMem (Value, sizeof (Value));\r
+\r
if (Format > EFI_IFR_FF_CASE_INSENSITIVE) {\r
- return EFI_UNSUPPORTED;\r
+ return EFI_INVALID_PARAMETER;\r
}\r
\r
- Status = PopExpression (&Value);\r
+ Status = PopExpression (&Value[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Status = PopExpression (&Value[1]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
- return EFI_UNSUPPORTED;\r
+\r
+ Status = PopExpression (&Value[2]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ } \r
+\r
+ if (Value[0].Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
- Base = (UINTN) Value.Value.u64;\r
+ Base = (UINTN) Value[0].Value.u64;\r
\r
//\r
// String[0] - sub-string\r
String[0] = NULL;\r
String[1] = NULL;\r
for (Index = 0; Index < 2; Index++) {\r
- Status = PopExpression (&Value);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
-\r
- if (Value.Type != EFI_IFR_TYPE_STRING) {\r
- Status = EFI_UNSUPPORTED;\r
+ if (Value[Index + 1].Type != EFI_IFR_TYPE_STRING) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
goto Done;\r
}\r
\r
- String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);\r
+ String[Index] = GetToken (Value[Index + 1].Value.string, FormSet->HiiHandle);\r
if (String[Index] == NULL) {\r
Status = EFI_NOT_FOUND;\r
goto Done;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_VALUE Value;\r
+ EFI_HII_VALUE Value[3];\r
CHAR16 *String;\r
UINTN Base;\r
UINTN Length;\r
UINT8 *Buffer;\r
UINT16 BufferLen;\r
\r
- Status = PopExpression (&Value);\r
+ ZeroMem (Value, sizeof (Value));\r
+\r
+ Status = PopExpression (&Value[0]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
- return EFI_UNSUPPORTED;\r
- }\r
- Length = (UINTN) Value.Value.u64;\r
\r
- Status = PopExpression (&Value);\r
+ Status = PopExpression (&Value[1]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
- return EFI_UNSUPPORTED;\r
- }\r
- Base = (UINTN) Value.Value.u64;\r
\r
- Status = PopExpression (&Value);\r
+ Status = PopExpression (&Value[2]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
+ } \r
+\r
+ if (Value[0].Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
- if (Value.Type != EFI_IFR_TYPE_STRING && Value.Type != EFI_IFR_TYPE_BUFFER) {\r
- return EFI_UNSUPPORTED;\r
+ Length = (UINTN) Value[0].Value.u64;\r
+\r
+ if (Value[1].Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
- if (Value.Type == EFI_IFR_TYPE_STRING) {\r
- String = GetToken (Value.Value.string, FormSet->HiiHandle);\r
+ Base = (UINTN) Value[1].Value.u64;\r
+\r
+ if (Value[2].Type != EFI_IFR_TYPE_STRING && Value[2].Type != EFI_IFR_TYPE_BUFFER) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
+ }\r
+ if (Value[2].Type == EFI_IFR_TYPE_STRING) {\r
+ String = GetToken (Value[2].Value.string, FormSet->HiiHandle);\r
if (String == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
\r
FreePool (String);\r
} else {\r
- Buffer = Value.Buffer;\r
- BufferLen = Value.BufferLen;\r
+ Buffer = Value[2].Buffer;\r
+ BufferLen = Value[2].BufferLen;\r
\r
Result->Type = EFI_IFR_TYPE_BUFFER;\r
if (Length == 0 || Base >= BufferLen) {\r
Result->BufferLen = (UINT16)((BufferLen - Base) < Length ? (BufferLen - Base) : Length); \r
Result->Buffer = AllocateZeroPool (Result->BufferLen);\r
ASSERT (Result->Buffer != NULL);\r
- CopyMem (Result->Buffer, &Value.Buffer[Base], Result->BufferLen);\r
+ CopyMem (Result->Buffer, &Value[2].Buffer[Base], Result->BufferLen);\r
}\r
\r
- FreePool (Value.Buffer);\r
+ FreePool (Value[2].Buffer);\r
}\r
\r
return Status;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_VALUE Value;\r
+ EFI_HII_VALUE Value[3];\r
CHAR16 *String[2];\r
UINTN Count;\r
CHAR16 *Delimiter;\r
CHAR16 *StringPtr;\r
UINTN Index;\r
\r
- Status = PopExpression (&Value);\r
+ ZeroMem (Value, sizeof (Value));\r
+\r
+ Status = PopExpression (&Value[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Status = PopExpression (&Value[1]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
- return EFI_UNSUPPORTED;\r
+\r
+ Status = PopExpression (&Value[2]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ } \r
+\r
+ if (Value[0].Type > EFI_IFR_TYPE_NUM_SIZE_64) { \r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
- Count = (UINTN) Value.Value.u64;\r
+ Count = (UINTN) Value[0].Value.u64;\r
\r
//\r
// String[0] - Delimiter\r
String[0] = NULL;\r
String[1] = NULL;\r
for (Index = 0; Index < 2; Index++) {\r
- Status = PopExpression (&Value);\r
- if (EFI_ERROR (Status)) {\r
+ if (Value[Index + 1].Type != EFI_IFR_TYPE_STRING) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS; \r
goto Done;\r
}\r
\r
- if (Value.Type != EFI_IFR_TYPE_STRING) {\r
- Status = EFI_UNSUPPORTED;\r
- goto Done;\r
- }\r
-\r
- String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);\r
+ String[Index] = GetToken (Value[Index + 1].Value.string, FormSet->HiiHandle);\r
if (String[Index] == NULL) {\r
Status = EFI_NOT_FOUND;\r
goto Done;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_VALUE Value;\r
+ EFI_HII_VALUE Value[3];\r
CHAR16 *String[2];\r
CHAR16 *Charset;\r
UINTN Base;\r
CHAR16 *StringPtr;\r
BOOLEAN Found;\r
\r
- Status = PopExpression (&Value);\r
+ ZeroMem (Value, sizeof (Value));\r
+\r
+ Status = PopExpression (&Value[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Status = PopExpression (&Value[1]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
- return EFI_UNSUPPORTED;\r
+\r
+ Status = PopExpression (&Value[2]);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ } \r
+\r
+ if (Value[0].Type > EFI_IFR_TYPE_NUM_SIZE_64) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ return EFI_SUCCESS;\r
}\r
- Base = (UINTN) Value.Value.u64;\r
+ Base = (UINTN) Value[0].Value.u64;\r
\r
//\r
// String[0] - Charset\r
String[0] = NULL;\r
String[1] = NULL;\r
for (Index = 0; Index < 2; Index++) {\r
- Status = PopExpression (&Value);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
-\r
- if (Value.Type != EFI_IFR_TYPE_STRING) {\r
- Status = EFI_UNSUPPORTED;\r
+ if (Value[Index + 1].Type != EFI_IFR_TYPE_STRING) {\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
goto Done;\r
}\r
\r
- String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);\r
+ String[Index] = GetToken (Value[Index + 1].Value.string, FormSet->HiiHandle);\r
if (String [Index] == NULL) {\r
Status = EFI_NOT_FOUND;\r
goto Done;\r
}\r
\r
if (Base >= StrLen (String[1])) {\r
- Status = EFI_UNSUPPORTED;\r
+ Result->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
goto Done;\r
}\r
\r
\r
@param Value1 Expression value to compare on left-hand.\r
@param Value2 Expression value to compare on right-hand.\r
+ @param Result Return value after compare.\r
+ retval 0 Two operators equal.\r
+ return Positive value if Value1 is greater than Value2.\r
+ retval Negative value if Value1 is less than Value2.\r
@param HiiHandle Only required for string compare.\r
\r
- @retval EFI_INVALID_PARAMETER Could not perform compare on two values.\r
- @retval 0 Two operators equal.\r
- @return Positive value if Value1 is greater than Value2.\r
- @retval Negative value if Value1 is less than Value2.\r
+ @retval other Could not perform compare on two values.\r
+ @retval EFI_SUCCESS Compare the value success.\r
\r
**/\r
-INTN\r
+EFI_STATUS\r
CompareHiiValue (\r
IN EFI_HII_VALUE *Value1,\r
IN EFI_HII_VALUE *Value2,\r
+ OUT INTN *Result,\r
IN EFI_HII_HANDLE HiiHandle OPTIONAL\r
)\r
{\r
- INTN Result;\r
INT64 Temp64;\r
CHAR16 *Str1;\r
CHAR16 *Str2;\r
\r
if (Value1->Type >= EFI_IFR_TYPE_OTHER || Value2->Type >= EFI_IFR_TYPE_OTHER ) {\r
if (Value1->Type != EFI_IFR_TYPE_BUFFER && Value2->Type != EFI_IFR_TYPE_BUFFER) {\r
- return EFI_INVALID_PARAMETER;\r
+ return EFI_UNSUPPORTED;\r
}\r
}\r
\r
//\r
// Both Operator should be type of String\r
//\r
- return EFI_INVALID_PARAMETER;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
if (Value1->Value.string == 0 || Value2->Value.string == 0) {\r
}\r
\r
if (Value1->Value.string == Value2->Value.string) {\r
- return 0;\r
+ *Result = 0;\r
+ return EFI_SUCCESS;\r
}\r
\r
Str1 = GetToken (Value1->Value.string, HiiHandle);\r
//\r
// String not found\r
//\r
- return EFI_INVALID_PARAMETER;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
Str2 = GetToken (Value2->Value.string, HiiHandle);\r
if (Str2 == NULL) {\r
FreePool (Str1);\r
- return EFI_INVALID_PARAMETER;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
- Result = StrCmp (Str1, Str2);\r
+ *Result = StrCmp (Str1, Str2);\r
\r
FreePool (Str1);\r
FreePool (Str2);\r
\r
- return Result;\r
+ return EFI_SUCCESS;\r
}\r
\r
if (Value1->Type == EFI_IFR_TYPE_BUFFER || Value2->Type == EFI_IFR_TYPE_BUFFER ) {\r
//\r
// Both Operator should be type of Buffer.\r
//\r
- return EFI_INVALID_PARAMETER;\r
+ return EFI_UNSUPPORTED;\r
}\r
Len = Value1->BufferLen > Value2->BufferLen ? Value2->BufferLen : Value1->BufferLen;\r
- Result = CompareMem (Value1->Buffer, Value2->Buffer, Len);\r
- if ((Result == 0) && (Value1->BufferLen != Value2->BufferLen))\r
+ *Result = CompareMem (Value1->Buffer, Value2->Buffer, Len);\r
+ if ((*Result == 0) && (Value1->BufferLen != Value2->BufferLen))\r
{\r
//\r
// In this case, means base on samll number buffer, the data is same\r
// So which value has more data, which value is bigger.\r
//\r
- Result = Value1->BufferLen > Value2->BufferLen ? 1 : -1;\r
+ *Result = Value1->BufferLen > Value2->BufferLen ? 1 : -1;\r
}\r
- return Result;\r
+ return EFI_SUCCESS;\r
} \r
\r
//\r
//\r
Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);\r
if (Temp64 > 0) {\r
- Result = 1;\r
+ *Result = 1;\r
} else if (Temp64 < 0) {\r
- Result = -1;\r
+ *Result = -1;\r
} else {\r
- Result = 0;\r
+ *Result = 0;\r
}\r
\r
- return Result;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
case EFI_IFR_EQ_ID_VAL_OP:\r
Question = IdToQuestion (FormSet, Form, OpCode->QuestionId);\r
if (Question == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
- Result = CompareHiiValue (&Question->HiiValue, &OpCode->Value, NULL);\r
- if (Result == EFI_INVALID_PARAMETER) {\r
- Status = EFI_INVALID_PARAMETER;\r
+ Status = CompareHiiValue (&Question->HiiValue, &OpCode->Value, &Result, NULL);\r
+ if (Status == EFI_UNSUPPORTED) {\r
+ Status = EFI_SUCCESS;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
+ }\r
+\r
+ if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
Value->Value.b = (BOOLEAN) ((Result == 0) ? TRUE : FALSE);\r
case EFI_IFR_EQ_ID_ID_OP:\r
Question = IdToQuestion (FormSet, Form, OpCode->QuestionId);\r
if (Question == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Question2 = IdToQuestion (FormSet, Form, OpCode->QuestionId2);\r
if (Question2 == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
- Result = CompareHiiValue (&Question->HiiValue, &Question2->HiiValue, FormSet->HiiHandle);\r
- if (Result == EFI_INVALID_PARAMETER) {\r
- Status = EFI_INVALID_PARAMETER;\r
+ Status = CompareHiiValue (&Question->HiiValue, &Question2->HiiValue, &Result, FormSet->HiiHandle);\r
+ if (Status == EFI_UNSUPPORTED) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
+ if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
Value->Value.b = (BOOLEAN) ((Result == 0) ? TRUE : FALSE);\r
case EFI_IFR_EQ_ID_VAL_LIST_OP:\r
Question = IdToQuestion (FormSet, Form, OpCode->QuestionId);\r
if (Question == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value->Value.b = FALSE;\r
// Validate the expression value\r
//\r
if ((Value->Type > EFI_IFR_TYPE_NUM_SIZE_64) || (Value->Value.u64 > 0xffff)) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
if (OpCode->DevicePath != 0) {\r
StrPtr = GetToken (OpCode->DevicePath, FormSet->HiiHandle);\r
if (StrPtr == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
if (!GetQuestionValueFromForm((EFI_DEVICE_PATH_PROTOCOL*)StrPtr, NULL, &OpCode->Guid, Value->Value.u16, &QuestionVal)){\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
Value = &QuestionVal;\r
} else if (CompareGuid (&OpCode->Guid, &gZeroGuid) != 0) {\r
if (!GetQuestionValueFromForm(NULL, FormSet->HiiHandle, &OpCode->Guid, Value->Value.u16, &QuestionVal)){\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
- Value = &QuestionVal; \r
+ Value = &QuestionVal;\r
} else {\r
Question = IdToQuestion (FormSet, Form, Value->Value.u16);\r
if (Question == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
//\r
//\r
RuleExpression = RuleIdToExpression (Form, OpCode->RuleId);\r
if (RuleExpression == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
//\r
// Evaluate this rule expression\r
//\r
Status = EvaluateExpression (FormSet, Form, RuleExpression);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
+ if (EFI_ERROR (Status) || RuleExpression->Result.Type == EFI_IFR_TYPE_UNDEFINED) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value = &RuleExpression->Result;\r
goto Done;\r
}\r
if (Value->Type != EFI_IFR_TYPE_STRING && Value->Type != EFI_IFR_TYPE_BUFFER) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
if (Value->Type == EFI_IFR_TYPE_STRING) {\r
goto Done;\r
}\r
if (Value->Type != EFI_IFR_TYPE_BOOLEAN) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
Value->Value.b = (BOOLEAN) (!Value->Value.b);\r
break;\r
// Validate the expression value\r
//\r
if ((Value->Type > EFI_IFR_TYPE_NUM_SIZE_64) || (Value->Value.u64 > 0xffff)) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Question = IdToQuestion (FormSet, Form, Value->Value.u16);\r
if (Question == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value = &Question->HiiValue;\r
// Validate the expression value\r
//\r
if ((Value->Type > EFI_IFR_TYPE_NUM_SIZE_64) || (Value->Value.u64 > 0xffff)) {\r
- Status = EFI_NOT_FOUND;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value->Type = EFI_IFR_TYPE_STRING;\r
IfrStrToUpper (StrPtr);\r
if (StrCmp (StrPtr, L"TRUE") == 0){\r
Value->Value.b = TRUE;\r
+ Value->Type = EFI_IFR_TYPE_BOOLEAN;\r
} else if (StrCmp (StrPtr, L"FALSE") == 0) {\r
Value->Value.b = FALSE;\r
+ Value->Type = EFI_IFR_TYPE_BOOLEAN;\r
} else {\r
- Status = EFI_INVALID_PARAMETER;\r
- FreePool (StrPtr);\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
}\r
FreePool (StrPtr);\r
- Value->Type = EFI_IFR_TYPE_BOOLEAN;\r
} else if (Value->Type == EFI_IFR_TYPE_BUFFER) {\r
//\r
// When converting from a buffer, if the buffer is all zeroes, \r
}\r
\r
if (Value->Type != EFI_IFR_TYPE_STRING) {\r
- Status = EFI_UNSUPPORTED;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
StrPtr = GetToken (Value->Value.string, FormSet->HiiHandle);\r
goto Done;\r
}\r
if (Value->Type > EFI_IFR_TYPE_DATE) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value->Type = EFI_IFR_TYPE_NUM_SIZE_64;\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
- if (Data2.Type > EFI_IFR_TYPE_DATE) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
- }\r
\r
//\r
// Pop another expression from the expression stack\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
+\r
+ if (Data2.Type > EFI_IFR_TYPE_DATE) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
+ }\r
+\r
+\r
if (Data1.Type > EFI_IFR_TYPE_DATE) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
Value->Type = EFI_IFR_TYPE_NUM_SIZE_64;\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
- if (Data2.Type != EFI_IFR_TYPE_BOOLEAN) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
- }\r
\r
//\r
// Pop another expression from the expression stack\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
+\r
+ if (Data2.Type != EFI_IFR_TYPE_BOOLEAN) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
+ }\r
+\r
if (Data1.Type != EFI_IFR_TYPE_BOOLEAN) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
if (OpCode->Operand == EFI_IFR_AND_OP) {\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
- if (Data2.Type > EFI_IFR_TYPE_BOOLEAN && \r
- Data2.Type != EFI_IFR_TYPE_STRING && \r
- Data2.Type != EFI_IFR_TYPE_BUFFER) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
- }\r
\r
//\r
// Pop another expression from the expression stack\r
goto Done;\r
}\r
\r
- Result = CompareHiiValue (&Data1, &Data2, FormSet->HiiHandle);\r
+ if (Data2.Type > EFI_IFR_TYPE_BOOLEAN && \r
+ Data2.Type != EFI_IFR_TYPE_STRING && \r
+ Data2.Type != EFI_IFR_TYPE_BUFFER) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
+ }\r
+\r
+ if (Data1.Type > EFI_IFR_TYPE_BOOLEAN && \r
+ Data1.Type != EFI_IFR_TYPE_STRING && \r
+ Data1.Type != EFI_IFR_TYPE_BUFFER) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
+ }\r
+\r
+ Status = CompareHiiValue (&Data1, &Data2, &Result, FormSet->HiiHandle);\r
if (Data1.Type == EFI_IFR_TYPE_BUFFER) {\r
FreePool (Data1.Buffer);\r
FreePool (Data2.Buffer);\r
}\r
\r
- if (Result == EFI_INVALID_PARAMETER) {\r
- Status = EFI_INVALID_PARAMETER;\r
+ if (Status == EFI_UNSUPPORTED) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
+\r
+ if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
\r
goto Done;\r
}\r
if (Data1.Type != EFI_IFR_TYPE_BOOLEAN) {\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Done;\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+ break;\r
}\r
\r
if (Data1.Value.b) {\r
//\r
// Compare the expression value with current value\r
//\r
- if (CompareHiiValue (&Data1, &SubExpression->Result, NULL) == 0) {\r
+ if ((CompareHiiValue (&Data1, &SubExpression->Result, &Result, NULL) == EFI_SUCCESS) && (Result == 0)) {\r
//\r
// Try get the map value.\r
//\r
default:\r
break;\r
}\r
- if (EFI_ERROR (Status)) {\r
+ if (EFI_ERROR (Status) || Value->Type == EFI_IFR_TYPE_UNDEFINED) {\r
goto Done;\r
}\r
\r