Add a BOM check for UNI file and fix some help message error
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: YangX Li <yangx.li@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17876
6f19259b-4bc3-4df7-8a09-
765794883524
return False\r
return True\r
\r
return False\r
return True\r
\r
+#\r
+# Check if a UTF16-LE file has a BOM header\r
+#\r
+def CheckUTF16FileHeader(File):\r
+ FileIn = open(File, 'rb').read(2)\r
+ if FileIn != '\xff\xfe':\r
+ return False\r
+\r
+ return True\r
from Library.Misc import PathClass\r
from Library.Misc import GetCharIndexOutStr\r
from Library import DataType as DT\r
from Library.Misc import PathClass\r
from Library.Misc import GetCharIndexOutStr\r
from Library import DataType as DT\r
+from Library.ParserValidate import CheckUTF16FileHeader\r
\r
##\r
# Static definitions\r
\r
##\r
# Static definitions\r
# @retval LangName: Valid lanugage code in RFC 1766 format or None\r
#\r
def GetLanguageCode1766(LangName, File=None):\r
# @retval LangName: Valid lanugage code in RFC 1766 format or None\r
#\r
def GetLanguageCode1766(LangName, File=None):\r
length = len(LangName)\r
if length == 2:\r
if LangName.isalpha():\r
length = len(LangName)\r
if length == 2:\r
if LangName.isalpha():\r
ToolError.FILE_NOT_FOUND,\r
ExtraData=File.Path)\r
\r
ToolError.FILE_NOT_FOUND,\r
ExtraData=File.Path)\r
\r
+ #\r
+ # Check file header of the Uni file\r
+ #\r
+ if not CheckUTF16FileHeader(File.Path):\r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
+ ExtraData='The file %s is either invalid UTF-16LE or it is missing the BOM.' % File.Path)\r
+\r
try:\r
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()\r
except UnicodeError:\r
try:\r
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()\r
except UnicodeError:\r
\r
StringEntryExistsFlag = 1\r
if not Line.endswith('"'):\r
\r
StringEntryExistsFlag = 1\r
if not Line.endswith('"'):\r
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)\r
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,\r
+ ExtraData='''The line %s misses '"' at the end of it in file %s'''\r
+ % (LineCount, File.Path))\r
elif Line.startswith(u'#language'):\r
if StringEntryExistsFlag == 2:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
elif Line.startswith(u'#language'):\r
if StringEntryExistsFlag == 2:\r
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, \r
- Message=ST.ERR_UNIPARSE_LINEFEED_UP_EXIST % Line, ExtraData=File.Path)\r
+ Message=ST.ERR_UNI_MISS_STRING_ENTRY % Line, ExtraData=File.Path)\r
StringEntryExistsFlag = 0\r
else:\r
StringEntryExistsFlag = 0\r
StringEntryExistsFlag = 0\r
else:\r
StringEntryExistsFlag = 0\r
MSG_VERSION_COPYRIGHT = _("\n %s\n %s" % (MSG_VERSION, MSG_COPYRIGHT))\r
MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT))\r
MSG_DESCRIPTION = _("The UEFIUPT is used to create, " + \\r
MSG_VERSION_COPYRIGHT = _("\n %s\n %s" % (MSG_VERSION, MSG_COPYRIGHT))\r
MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT))\r
MSG_DESCRIPTION = _("The UEFIUPT is used to create, " + \\r
- "install or remove a UEFI Distribution Package.")\r
-\r
+ "install or remove a UEFI Distribution Package. " + \\r
+ "If WORKSPACE environment variable is present, " + \\r
+ "then UPT will install packages to the location specified by WORKSPACE, " + \\r
+ "otherwise UPT will install packages to the current directory. " + \\r
+ "Option -n will override this default installation location")\r
\r
#\r
# INF Parser related strings.\r
\r
#\r
# INF Parser related strings.\r
ERR_UNIPARSE_STRTOKEN_FORMAT_ERROR = _("The String Token Type %s must be one of the '_PROMPT', '_HELP' and '_ERR_'.") \r
ERR_UNIPARSE_LINEFEED_UNDER_EXIST = _("Line feed should not exist under this line: %s.")\r
ERR_UNIPARSE_LINEFEED_UP_EXIST = _("Line feed should not exist up this line: %s.")\r
ERR_UNIPARSE_STRTOKEN_FORMAT_ERROR = _("The String Token Type %s must be one of the '_PROMPT', '_HELP' and '_ERR_'.") \r
ERR_UNIPARSE_LINEFEED_UNDER_EXIST = _("Line feed should not exist under this line: %s.")\r
ERR_UNIPARSE_LINEFEED_UP_EXIST = _("Line feed should not exist up this line: %s.")\r
+ERR_UNI_MISS_STRING_ENTRY = _("String entry missed in this Entry, %s.")\r
ERR_UNI_MISS_LANGENTRY = _("Language entry missed in this Entry, %s.")\r
ERR_BINARY_HEADER_ORDER = _("Binary header must follow the file header.")\r
ERR_NO_SOURCE_HEADER = _("File header statement \"## @file\" must exist at the first place.")\r
ERR_UNI_MISS_LANGENTRY = _("Language entry missed in this Entry, %s.")\r
ERR_BINARY_HEADER_ORDER = _("Binary header must follow the file header.")\r
ERR_NO_SOURCE_HEADER = _("File header statement \"## @file\" must exist at the first place.")\r