]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrError.cpp
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrError.cpp
CommitLineData
5b19df7f
LG
1/*++\r
2\r
4b1e1121
HT
3Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials\r
5b19df7f
LG
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14VfrError.cpp\r
15\r
16Abstract:\r
17\r
18--*/\r
19\r
95d675b5 20#include "stdio.h"\r
21#include "string.h"\r
22#include "stdlib.h"\r
23#include "VfrError.h"\r
24\r
25static SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = {\r
26 { VFR_RETURN_SUCCESS, NULL },\r
27 { VFR_RETURN_ERROR_SKIPED, NULL },\r
28 { VFR_RETURN_FATAL_ERROR, "fatal error!!" },\r
29\r
30 { VFR_RETURN_MISMATCHED, "unexpected token" },\r
31 { VFR_RETURN_INVALID_PARAMETER, "Invalid parameter" },\r
32 { VFR_RETURN_OUT_FOR_RESOURCES, "system out of memory" },\r
33 { VFR_RETURN_UNSUPPORTED, "unsupported" },\r
34 { VFR_RETURN_REDEFINED, "already defined" },\r
35 { VFR_RETURN_FORMID_REDEFINED, "form id already defined" },\r
36 { VFR_RETURN_QUESTIONID_REDEFINED, "question id already defined" },\r
37 { VFR_RETURN_VARSTOREID_REDEFINED, "varstore id already defined" },\r
38 { VFR_RETURN_UNDEFINED, "undefined" },\r
39 { VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION, "some variable has not defined by a question"},\r
40 { VFR_RETURN_GET_EFIVARSTORE_ERROR, "get efi varstore error"},\r
41 { VFR_RETURN_EFIVARSTORE_USE_ERROR, "can not use the efi varstore like this" },\r
42 { VFR_RETURN_EFIVARSTORE_SIZE_ERROR, "unsupport efi varstore size should be <= 8 bytes" },\r
43 { VFR_RETURN_GET_NVVARSTORE_ERROR, "get name value varstore error" },\r
44 { VFR_RETURN_QVAR_REUSE, "variable reused by more than one question" }, \r
45 { VFR_RETURN_FLAGS_UNSUPPORTED, "flags unsupported" }, \r
46 { VFR_RETURN_ERROR_ARRARY_NUM, "array number error" },\r
47 { VFR_RETURN_DATA_STRING_ERROR, "data field string error or not support"},\r
48 { VFR_RETURN_CODEUNDEFINED, "Undefined Error Code" }\r
49};\r
50\r
51CVfrErrorHandle::CVfrErrorHandle (\r
52 VOID\r
53 )\r
54{\r
55 mScopeRecordListHead = NULL;\r
56 mScopeRecordListTail = NULL;\r
57 mVfrErrorHandleTable = VFR_ERROR_HANDLE_TABLE;\r
58}\r
59\r
60CVfrErrorHandle::~CVfrErrorHandle (\r
61 VOID\r
62 )\r
63{\r
64 SVfrFileScopeRecord *pNode = NULL;\r
65\r
66 while (mScopeRecordListHead != NULL) {\r
67 pNode = mScopeRecordListHead;\r
68 mScopeRecordListHead = mScopeRecordListHead->mNext;\r
69 delete pNode;\r
70 }\r
71\r
72 mScopeRecordListHead = NULL;\r
73 mScopeRecordListTail = NULL;\r
74 mVfrErrorHandleTable = NULL;\r
75}\r
76\r
77SVfrFileScopeRecord::SVfrFileScopeRecord (\r
78 IN INT8 *Record, \r
79 IN UINT32 LineNum\r
80 )\r
81{\r
82 UINT32 Index;\r
83 INT8 *FileName = NULL;\r
84 INT8 *Str = NULL;\r
85\r
86 mWholeScopeLine = LineNum;\r
87 mNext = NULL;\r
88\r
89 Str = strchr (Record, ' ');\r
90 mScopeLineStart = atoi (++Str);\r
91\r
92 Str = strchr (Str, '\"');\r
93 FileName = ++Str;\r
94\r
95 while((Str = strstr (FileName, "\\\\")) != NULL) {\r
96 FileName = Str + 2;\r
97 }\r
98 if ((mFileName = new INT8[strlen(FileName)]) != NULL) {\r
99 for (Index = 0; FileName[Index] != '\"'; Index++) {\r
100 mFileName[Index] = FileName[Index];\r
101 }\r
102 mFileName[Index] = '\0';\r
103 }\r
104\r
105 return;\r
106}\r
107\r
108SVfrFileScopeRecord::~SVfrFileScopeRecord (\r
109 VOID\r
110 )\r
111{\r
112 if (mFileName != NULL) {\r
113 delete mFileName;\r
114 }\r
115}\r
116\r
117VOID\r
118CVfrErrorHandle::ParseFileScopeRecord (\r
119 IN INT8 *Record, \r
120 IN UINT32 WholeScopeLine\r
121 )\r
122{\r
123 INT8 *FullPathName = NULL;\r
124 SVfrFileScopeRecord *pNode = NULL;\r
125\r
126 if (Record == NULL) {\r
127 return;\r
128 }\r
129\r
130 if ((pNode = new SVfrFileScopeRecord(Record, WholeScopeLine)) == NULL) {\r
131 return;\r
132 }\r
133\r
134 if (mScopeRecordListHead == NULL) {\r
135 mScopeRecordListTail = mScopeRecordListHead = pNode;\r
136 } else {\r
137 mScopeRecordListTail->mNext = pNode;\r
138 mScopeRecordListTail = pNode;\r
139 }\r
140}\r
141\r
142VOID\r
143CVfrErrorHandle::GetFileNameLineNum (\r
144 IN UINT32 LineNum,\r
145 OUT INT8 **FileName,\r
146 OUT UINT32 *FileLine\r
147 )\r
148{\r
149 SVfrFileScopeRecord *pNode = NULL;\r
150\r
151 if ((FileName == NULL) || (FileLine == NULL)) {\r
152 return;\r
153 }\r
154\r
155 *FileName = NULL;\r
156 *FileLine = 0xFFFFFFFF;\r
157\r
158 for (pNode = mScopeRecordListHead; pNode->mNext != NULL; pNode = pNode->mNext) {\r
159 if ((LineNum > pNode->mWholeScopeLine) && (pNode->mNext->mWholeScopeLine > LineNum)) {\r
160 *FileName = pNode->mFileName;\r
161 *FileLine = LineNum - pNode->mWholeScopeLine + pNode->mScopeLineStart - 1;\r
162 return ;\r
163 }\r
164 }\r
165\r
166 *FileName = pNode->mFileName;\r
167 *FileLine = LineNum - pNode->mWholeScopeLine + pNode->mScopeLineStart - 1;\r
168}\r
169\r
170VOID\r
171CVfrErrorHandle::PrintError (\r
172 IN UINT32 LineNum,\r
173 IN INT8 *TokName,\r
174 IN INT8 *ErrorMsg\r
175 )\r
176{\r
177 INT8 *FileName = NULL;\r
178 UINT32 FileLine;\r
179\r
180 GetFileNameLineNum (LineNum, &FileName, &FileLine);\r
181 printf ("%s line %d: error %s %s\n", FileName, FileLine, TokName, ErrorMsg);\r
182}\r
183\r
184UINT8\r
185CVfrErrorHandle::HandleError (\r
186 IN EFI_VFR_RETURN_CODE ErrorCode,\r
187 IN UINT32 LineNum,\r
188 IN INT8 *TokName\r
189 )\r
190{\r
191 UINT32 Index;\r
192 INT8 *FileName = NULL;\r
193 UINT32 FileLine;\r
194 INT8 *ErrorMsg = NULL;\r
195\r
196 if (mVfrErrorHandleTable == NULL) {\r
197 return 1;\r
198 }\r
199\r
200 for (Index = 0; mVfrErrorHandleTable[Index].mErrorCode != VFR_RETURN_CODEUNDEFINED; Index++) {\r
201 if (ErrorCode == mVfrErrorHandleTable[Index].mErrorCode) {\r
202 ErrorMsg = mVfrErrorHandleTable[Index].mErrorMsg;\r
203 break;\r
204 }\r
205 }\r
206\r
207 if (ErrorMsg != NULL) {\r
208 GetFileNameLineNum (LineNum, &FileName, &FileLine);\r
209 printf ("%s line %d: error %s %s\n", FileName, FileLine, TokName, ErrorMsg);\r
210 return 1;\r
211 } else {\r
212 return 0;\r
213 }\r
214}\r
215\r
216CVfrErrorHandle gCVfrErrorHandle;\r