]> granicus.if.org Git - python/commitdiff
SF bug #44271: os.path.expanduser problem w/o HOME set.
authorTim Peters <tim.peters@gmail.com>
Thu, 19 Jul 2001 17:18:18 +0000 (17:18 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 19 Jul 2001 17:18:18 +0000 (17:18 +0000)
This is a Windows-specific glitch that's really due to that, e.g.,
ntpath.join("c:", "/abc") returned "/abc" instead of "c:/abc".  Made
join smarter.
Bugfix candidate.

Lib/ntpath.py

index 71027c1112293e6bc44406ba7651e0d80f528ef1..13de59bdca21575c068e77d459469a2a9b8bd85e 100644 (file)
@@ -42,12 +42,22 @@ def join(a, *p):
     """Join two or more pathname components, inserting "\\" as needed"""
     path = a
     for b in p:
-        if isabs(b):
-            path = b
-        elif path == '' or path[-1:] in '/\\:':
-            path = path + b
-        else:
-            path = path + "\\" + b
+        # If path is a raw drive letter (e.g. "C:"), and b doesn't start
+        # with a drive letter, path+b is correct, and regardless of whether
+        # b is absolute on its own.
+        if len(path) == 2 and path[-1] == ":" and splitdrive(b)[0] == "":
+            pass
+
+        # In any other case, if b is absolute it wipes out the path so far.
+        elif isabs(b) or path == "":
+            path = ""
+
+        # Else make sure a separator appears between the pieces.
+        elif path[-1:] not in "/\\":
+            b = "\\" + b
+
+        path += b
+
     return path