--- /dev/null
+#ifndef _VFRERROR_H_\r
+#define _VFRERROR_H_\r
+\r
+#include "Tiano.h"\r
+#include "EfiTypes.h"\r
+\r
+typedef enum {\r
+ VFR_RETURN_SUCCESS = 0,\r
+ VFR_RETURN_ERROR_SKIPED,\r
+ VFR_RETURN_FATAL_ERROR,\r
+ VFR_RETURN_MISMATCHED,\r
+ VFR_RETURN_INVALID_PARAMETER,\r
+ VFR_RETURN_OUT_FOR_RESOURCES,\r
+ VFR_RETURN_UNSUPPORTED,\r
+ VFR_RETURN_REDEFINED,\r
+ VFR_RETURN_FORMID_REDEFINED,\r
+ VFR_RETURN_QUESTIONID_REDEFINED,\r
+ VFR_RETURN_VARSTOREID_REDEFINED,\r
+ VFR_RETURN_UNDEFINED,\r
+ VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION,\r
+ VFR_RETURN_GET_EFIVARSTORE_ERROR,\r
+ VFR_RETURN_EFIVARSTORE_USE_ERROR,\r
+ VFR_RETURN_EFIVARSTORE_SIZE_ERROR,\r
+ VFR_RETURN_GET_NVVARSTORE_ERROR,\r
+ VFR_RETURN_QVAR_REUSE,\r
+ VFR_RETURN_FLAGS_UNSUPPORTED,\r
+ VFR_RETURN_ERROR_ARRARY_NUM,\r
+ VFR_RETURN_DATA_STRING_ERROR,\r
+ VFR_RETURN_CODEUNDEFINED\r
+} EFI_VFR_RETURN_CODE;\r
+\r
+typedef struct _SVFR_ERROR_HANDLE {\r
+ EFI_VFR_RETURN_CODE mErrorCode;\r
+ INT8 *mErrorMsg;\r
+} SVFR_ERROR_HANDLE;\r
+\r
+struct SVfrFileScopeRecord {\r
+ INT8 *mFileName;\r
+ UINT32 mWholeScopeLine;\r
+ UINT32 mScopeLineStart;\r
+ SVfrFileScopeRecord *mNext;\r
+\r
+ SVfrFileScopeRecord (IN INT8 *, IN UINT32);\r
+ ~SVfrFileScopeRecord();\r
+};\r
+\r
+class CVfrErrorHandle {\r
+private:\r
+ SVFR_ERROR_HANDLE *mVfrErrorHandleTable;\r
+ SVfrFileScopeRecord *mScopeRecordListHead;\r
+ SVfrFileScopeRecord *mScopeRecordListTail;\r
+\r
+public:\r
+ CVfrErrorHandle (VOID);\r
+ ~CVfrErrorHandle (VOID);\r
+\r
+ VOID ParseFileScopeRecord (IN INT8 *, IN UINT32);\r
+ VOID GetFileNameLineNum (IN UINT32, OUT INT8 **, OUT UINT32 *);\r
+ UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN INT8 *TokName = "\0");\r
+ VOID PrintError (IN UINT32 LineNum = 0, IN INT8 *TokName = "\0", IN INT8 *ErrorMsg = "\0");\r
+};\r
+\r
+#define CHECK_ERROR_RETURN(f, v) do { EFI_VFR_RETURN_CODE r; if ((r = (f)) != (v)) { return r; } } while (0)\r
+\r
+extern CVfrErrorHandle gCVfrErrorHandle;\r
+\r
+#endif\r