]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/Common/LongFilePathSupport.py
BaseTools: Replace StandardError with Expression
[mirror_edk2.git] / BaseTools / Source / Python / Common / LongFilePathSupport.py
1 ## @file
2 # Override built in function file.open to provide support for long file path
3 #
4 # Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
5 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
9 #
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 #
13
14 import os
15 import platform
16 import shutil
17 import codecs
18
19 ##
20 # OpenLongPath
21 # Convert a file path to a long file path
22 #
23 def LongFilePath(FileName):
24 FileName = os.path.normpath(FileName)
25 if platform.system() == 'Windows':
26 if FileName.startswith('\\\\?\\'):
27 return FileName
28 if FileName.startswith('\\\\'):
29 return '\\\\?\\UNC\\' + FileName[2:]
30 if os.path.isabs(FileName):
31 return '\\\\?\\' + FileName
32 return FileName
33
34 ##
35 # OpenLongFilePath
36 # wrap open to support opening a long file path
37 #
38 def OpenLongFilePath(FileName, Mode='r', Buffer= -1):
39 return open(LongFilePath(FileName), Mode, Buffer)
40
41 def CodecOpenLongFilePath(Filename, Mode='rb', Encoding=None, Errors='strict', Buffering=1):
42 return codecs.open(LongFilePath(Filename), Mode, Encoding, Errors, Buffering)
43
44 ##
45 # CopyLongFilePath
46 # wrap copyfile to support copy a long file path
47 #
48 def CopyLongFilePath(src, dst):
49 with open(LongFilePath(src), 'rb') as fsrc:
50 with open(LongFilePath(dst), 'wb') as fdst:
51 shutil.copyfileobj(fsrc, fdst)
52
53 ## Convert a python unicode string to a normal string
54 #
55 # Convert a python unicode string to a normal string
56 # UniToStr(u'I am a string') is 'I am a string'
57 #
58 # @param Uni: The python unicode string
59 #
60 # @retval: The formatted normal string
61 #
62 def UniToStr(Uni):
63 return repr(Uni)[2:-1]