]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/Upt: Add a BOM check for UNI file and fix some help message error
authorHess Chen <hesheng.chen@intel.com>
Wed, 8 Jul 2015 05:43:22 +0000 (05:43 +0000)
committerhchen30 <hchen30@Edk2>
Wed, 8 Jul 2015 05:43:22 +0000 (05:43 +0000)
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

BaseTools/Source/Python/UPT/Library/ParserValidate.py
BaseTools/Source/Python/UPT/Library/UniClassObject.py
BaseTools/Source/Python/UPT/Logger/StringTable.py

index bfb4bc749fdf20c01616d220987654c49ab67857..e9732278981a2455a33a4f111d343f7b1980c0c4 100644 (file)
@@ -721,3 +721,12 @@ def IsValidUserId(UserId):
             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
index 332ae273c78eb0eb3ef7cd04f206ac68f69361c3..c57bfdf57d9fcf4f95bc4c45505c3dcc31bdfcef 100644 (file)
@@ -27,6 +27,7 @@ from Library.String import GetLineNo
 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
@@ -136,6 +137,8 @@ def ConvertSpecialUnicodes(Uni):
 # @retval LangName:  Valid lanugage code in RFC 1766 format or None\r
 #\r
 def GetLanguageCode1766(LangName, File=None):\r
+    return LangName\r
+\r
     length = len(LangName)\r
     if length == 2:\r
         if LangName.isalpha():\r
@@ -424,6 +427,13 @@ class UniFileClassObject(object):
                              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
@@ -570,11 +580,13 @@ class UniFileClassObject(object):
                      \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
-                                    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
index 5cc7b1496f34d7a25daa3d3588b8a82973aee552..f15ac7f0bc6b2efa8eeb530849dd90919ed81bd2 100644 (file)
@@ -46,8 +46,11 @@ MSG_COPYRIGHT = _("Copyright (c) 2011 - 2015 Intel Corporation All Rights Reserv
 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
@@ -593,6 +596,7 @@ _("The string entry order in UNI file should be <AbstractStrings>, <DescriptionS
 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