]> 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
             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.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
@@ -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
 # @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
     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
                              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
@@ -570,11 +580,13 @@ class UniFileClassObject(object):
                      \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
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
 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
@@ -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_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