summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
commitf215e02bf85f68d3a6106c2a1f4f7f063f819064 (patch)
tree6bb5b92c046312c4e95ac2620b10ddf482d3fa8b /src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py
parentInitial commit. (diff)
downloadvirtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.tar.xz
virtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.zip
Adding upstream version 7.0.14-dfsg.upstream/7.0.14-dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py')
-rwxr-xr-xsrc/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py
new file mode 100755
index 00000000..c099aa4a
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/ConvertUni.py
@@ -0,0 +1,125 @@
+## @file
+# Check a patch for various format issues
+#
+# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+from __future__ import print_function
+
+VersionNumber = '0.1'
+__copyright__ = "Copyright (c) 2015, Intel Corporation All rights reserved."
+
+import argparse
+import codecs
+import os
+import sys
+
+class ConvertOneArg:
+ """Converts utf-16 to utf-8 for one command line argument.
+
+ This could be a single file, or a directory.
+ """
+
+ def __init__(self, utf8, source):
+ self.utf8 = utf8
+ self.source = source
+
+ self.ok = True
+
+ if not os.path.exists(source):
+ self.ok = False
+ elif os.path.isdir(source):
+ for (root, dirs, files) in os.walk(source):
+ files = filter(lambda a: a.endswith('.uni'), files)
+ for filename in files:
+ path = os.path.join(root, filename)
+ self.ok &= self.convert_one_file(path)
+ if not self.ok:
+ break
+
+ if not self.ok:
+ break
+ else:
+ self.ok &= self.convert_one_file(source)
+
+ def convert_one_file(self, source):
+ if self.utf8:
+ new_enc, old_enc = 'utf-8', 'utf-16'
+ else:
+ new_enc, old_enc = 'utf-16', 'utf-8'
+ #
+ # Read file
+ #
+ f = open(source, mode='rb')
+ file_content = f.read()
+ f.close()
+
+ #
+ # Detect UTF-16 Byte Order Mark at beginning of file.
+ #
+ bom = (file_content.startswith(codecs.BOM_UTF16_BE) or
+ file_content.startswith(codecs.BOM_UTF16_LE))
+ if bom != self.utf8:
+ print("%s: already %s" % (source, new_enc))
+ return True
+
+ #
+ # Decode old string data
+ #
+ str_content = file_content.decode(old_enc, 'ignore')
+
+ #
+ # Encode new string data
+ #
+ new_content = str_content.encode(new_enc, 'ignore')
+
+ #
+ # Write converted data back to file
+ #
+ f = open(source, mode='wb')
+ f.write(new_content)
+ f.close()
+
+ print(source + ": converted, size", len(file_content), '=>', len(new_content))
+ return True
+
+
+class ConvertUniApp:
+ """Converts .uni files between utf-16 and utf-8."""
+
+ def __init__(self):
+ self.parse_options()
+ sources = self.args.source
+
+ self.ok = True
+ for patch in sources:
+ self.process_one_arg(patch)
+
+ if self.ok:
+ self.retval = 0
+ else:
+ self.retval = -1
+
+ def process_one_arg(self, arg):
+ self.ok &= ConvertOneArg(self.utf8, arg).ok
+
+ def parse_options(self):
+ parser = argparse.ArgumentParser(description=__copyright__)
+ parser.add_argument('--version', action='version',
+ version='%(prog)s ' + VersionNumber)
+ parser.add_argument('source', nargs='+',
+ help='[uni file | directory]')
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument("--utf-8",
+ action="store_true",
+ help="Convert from utf-16 to utf-8 [default]")
+ group.add_argument("--utf-16",
+ action="store_true",
+ help="Convert from utf-8 to utf-16")
+ self.args = parser.parse_args()
+ self.utf8 = not self.args.utf_16
+
+if __name__ == "__main__":
+ sys.exit(ConvertUniApp().retval)