mirror of
https://git.rtems.org/rtems-source-builder
synced 2024-10-09 07:15:10 +08:00
sb/path: Handle unicode filenames in a source path
The change leaves the encoding in that currently exists because I cannot remember why it is there. If an encoding error happens return the same path to see if it will work.
This commit is contained in:
parent
122058ee84
commit
574839d855
@ -71,6 +71,20 @@ def shell(path):
|
|||||||
path = path.replace('//', '/')
|
path = path.replace('//', '/')
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def host_encode(dpath):
|
||||||
|
'''Encoding the path was present in the RSB however on a ZFS pool I am
|
||||||
|
seeing a failure with a go test in gcc:
|
||||||
|
gcc/testsuite/go.test/test/fixedbugs/issue27836.dir
|
||||||
|
Not encoding works however I am not sure why the encoding was added
|
||||||
|
so the following keeps the encoding and falls back to not encoded
|
||||||
|
if there is an error.0
|
||||||
|
'''
|
||||||
|
try:
|
||||||
|
return host(dpath).encode('utf8')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return dpath
|
||||||
|
|
||||||
def basename(path):
|
def basename(path):
|
||||||
path = shell(path)
|
path = shell(path)
|
||||||
return shell(os.path.basename(host(path)))
|
return shell(os.path.basename(host(path)))
|
||||||
@ -189,11 +203,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).encode('utf8')
|
hpath = host_encode(path)
|
||||||
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).encode('utf8')
|
hpath = host_encode(path)
|
||||||
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 +230,7 @@ def removeall(path):
|
|||||||
_remove_node(dir)
|
_remove_node(dir)
|
||||||
|
|
||||||
path = shell(path)
|
path = shell(path)
|
||||||
hpath = host(path).encode('utf8')
|
hpath = host_encode(path)
|
||||||
|
|
||||||
if os.path.exists(hpath):
|
if os.path.exists(hpath):
|
||||||
_remove(path)
|
_remove(path)
|
||||||
@ -317,11 +331,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).encode('utf8')
|
hpath = host_encode(path)
|
||||||
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).encode('utf8')
|
hpath = host_encode(path)
|
||||||
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 +359,7 @@ def get_size(path, depth = -1):
|
|||||||
return size
|
return size
|
||||||
|
|
||||||
path = shell(path)
|
path = shell(path)
|
||||||
hpath = host(path).encode('utf8')
|
hpath = host_encode(path)
|
||||||
size = 0
|
size = 0
|
||||||
|
|
||||||
if os.path.exists(hpath):
|
if os.path.exists(hpath):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user