diff options
author | Josh Gao <jmgao@google.com> | 2015-09-23 20:45:19 -0700 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2015-09-23 20:46:13 -0700 |
commit | f79bdee20cacc521d7ec3a8720a43087b47326d6 (patch) | |
tree | ee9330bdc29d1af5a033ca862a10a33e5e1c1b7f /lib/python2.7/nturl2path.py | |
parent | df5f01881b6d4e9c59be106b4063247433737773 (diff) | |
download | linux-x86-f79bdee20cacc521d7ec3a8720a43087b47326d6.tar.gz |
Import gdb 7.10 linux-x86_64 prebuilt.
Taken from aosp-master-ndk build 2274331.
Bug: http://b/21920612
Change-Id: I2129ab5b85c96273bdb97ee9ca82116bb4db87fa
Diffstat (limited to 'lib/python2.7/nturl2path.py')
-rw-r--r-- | lib/python2.7/nturl2path.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/python2.7/nturl2path.py b/lib/python2.7/nturl2path.py new file mode 100644 index 0000000..10ea272 --- /dev/null +++ b/lib/python2.7/nturl2path.py @@ -0,0 +1,66 @@ +"""Convert a NT pathname to a file URL and vice versa.""" + +def url2pathname(url): + """OS-specific conversion from a relative URL of the 'file' scheme + to a file system path; not recommended for general use.""" + # e.g. + # ///C|/foo/bar/spam.foo + # becomes + # C:\foo\bar\spam.foo + import string, urllib + # Windows itself uses ":" even in URLs. + url = url.replace(':', '|') + if not '|' in url: + # No drive specifier, just convert slashes + if url[:4] == '////': + # path is something like ////host/path/on/remote/host + # convert this to \\host\path\on\remote\host + # (notice halving of slashes at the start of the path) + url = url[2:] + components = url.split('/') + # make sure not to convert quoted slashes :-) + return urllib.unquote('\\'.join(components)) + comp = url.split('|') + if len(comp) != 2 or comp[0][-1] not in string.ascii_letters: + error = 'Bad URL: ' + url + raise IOError, error + drive = comp[0][-1].upper() + path = drive + ':' + components = comp[1].split('/') + for comp in components: + if comp: + path = path + '\\' + urllib.unquote(comp) + # Issue #11474: url like '/C|/' should convert into 'C:\\' + if path.endswith(':') and url.endswith('/'): + path += '\\' + return path + +def pathname2url(p): + """OS-specific conversion from a file system path to a relative URL + of the 'file' scheme; not recommended for general use.""" + # e.g. + # C:\foo\bar\spam.foo + # becomes + # ///C|/foo/bar/spam.foo + import urllib + if not ':' in p: + # No drive specifier, just convert slashes and quote the name + if p[:2] == '\\\\': + # path is something like \\host\path\on\remote\host + # convert this to ////host/path/on/remote/host + # (notice doubling of slashes at the start of the path) + p = '\\\\' + p + components = p.split('\\') + return urllib.quote('/'.join(components)) + comp = p.split(':') + if len(comp) != 2 or len(comp[0]) > 1: + error = 'Bad path: ' + p + raise IOError, error + + drive = urllib.quote(comp[0].upper()) + components = comp[1].split('\\') + path = '///' + drive + ':' + for comp in components: + if comp: + path = path + '/' + urllib.quote(comp) + return path |