mirror of
https://git.rtems.org/rtems-source-builder
synced 2024-10-09 07:15:10 +08:00
source-builder: Handle utf8 in path
It's possible for an environment to have unicode characters in its paths. This was recently exposed by the latest newlib update and RSB fails under Python 2.7 in this situation. This resolves the issue by ensuring that the paths are encoded and decoded as necessary. Related issue that caused the change in newlib: https://github.com/golang/go/issues/27836
This commit is contained in:
parent
3abfc9cdfc
commit
620b62436a
@ -58,7 +58,7 @@ def host(path):
|
|||||||
|
|
||||||
def shell(path):
|
def shell(path):
|
||||||
if isinstance(path, bytes):
|
if isinstance(path, bytes):
|
||||||
path = path.decode('ascii')
|
path = path.decode('utf8')
|
||||||
if path is not None:
|
if path is not None:
|
||||||
if windows or windows_posix:
|
if windows or windows_posix:
|
||||||
path = path.encode('ascii', 'ignore').decode('ascii')
|
path = path.encode('ascii', 'ignore').decode('ascii')
|
||||||
@ -189,11 +189,11 @@ def removeall(path):
|
|||||||
# get to the max path length on Windows.
|
# get to the max path length on Windows.
|
||||||
#
|
#
|
||||||
def _isdir(path):
|
def _isdir(path):
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
return os.path.isdir(hpath) and not os.path.islink(hpath)
|
return os.path.isdir(hpath) and not os.path.islink(hpath)
|
||||||
|
|
||||||
def _remove_node(path):
|
def _remove_node(path):
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
if not os.path.islink(hpath) and not os.access(hpath, os.W_OK):
|
if not os.path.islink(hpath) and not os.access(hpath, os.W_OK):
|
||||||
os.chmod(hpath, stat.S_IWUSR)
|
os.chmod(hpath, stat.S_IWUSR)
|
||||||
if _isdir(path):
|
if _isdir(path):
|
||||||
@ -216,7 +216,7 @@ def removeall(path):
|
|||||||
_remove_node(dir)
|
_remove_node(dir)
|
||||||
|
|
||||||
path = shell(path)
|
path = shell(path)
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
|
|
||||||
if os.path.exists(hpath):
|
if os.path.exists(hpath):
|
||||||
_remove(path)
|
_remove(path)
|
||||||
@ -317,11 +317,11 @@ def get_size(path, depth = -1):
|
|||||||
# get to the max path length on Windows.
|
# get to the max path length on Windows.
|
||||||
#
|
#
|
||||||
def _isdir(path):
|
def _isdir(path):
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
return os.path.isdir(hpath) and not os.path.islink(hpath)
|
return os.path.isdir(hpath) and not os.path.islink(hpath)
|
||||||
|
|
||||||
def _node_size(path):
|
def _node_size(path):
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
size = 0
|
size = 0
|
||||||
if not os.path.islink(hpath):
|
if not os.path.islink(hpath):
|
||||||
size = os.path.getsize(hpath)
|
size = os.path.getsize(hpath)
|
||||||
@ -345,7 +345,7 @@ def get_size(path, depth = -1):
|
|||||||
return size
|
return size
|
||||||
|
|
||||||
path = shell(path)
|
path = shell(path)
|
||||||
hpath = host(path)
|
hpath = host(path).encode('utf8')
|
||||||
size = 0
|
size = 0
|
||||||
|
|
||||||
if os.path.exists(hpath):
|
if os.path.exists(hpath):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user