One more crack at join():  stop trying to pretend this isn't a mass of
special cases.  test_pkg works again on Windows.
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index cf7c353..1be2961 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -42,22 +42,46 @@
     """Join two or more pathname components, inserting "\\" as needed"""
     path = a
     for b in p:
-        # If path starts with 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] == "":
-            if path[-1] in "/\\" and b[:1] in "/\\":
-                b = b[1:]
+        b_wins = 0  # set to 1 iff b makes path irrelevant
+        if path == "":
+            b_wins = 1
 
-        # In any other case, if b is absolute it wipes out the path so far.
-        elif isabs(b) or path == "":
-            path = ""
+        elif isabs(b):
+            # This probably wipes out path so far.  However, it's more
+            # complicated if path begins with a drive letter:
+            #     1. join('c:', '/a') == 'c:/a'
+            #     2. join('c:/', '/a') == 'c:/a'
+            # But
+            #     3. join('c:/a', '/b') == '/b'
+            #     4. join('c:', 'd:/') = 'd:/'
+            #     5. join('c:/', 'd:/') = 'd:/'
+            if path[1:2] != ":" or b[1:2] == ":":
+                # Path doesn't start with a drive letter, or cases 4 and 5.
+                b_wins = 1
 
-        # Else make sure a separator appears between the pieces.
-        elif path[-1:] not in "/\\":
-            b = "\\" + b
+            # Else path has a drive letter, and b doesn't but is absolute.
+            elif len(path) > 3 or (len(path) == 3 and
+                                   path[-1] not in "/\\"):
+                # case 3
+                b_wins = 1
 
-        path += b
+        if b_wins:
+            path = b
+        else:
+            # Join, and ensure there's a separator.
+            assert len(path) > 0
+            if path[-1] in "/\\":
+                if b and b[0] in "/\\":
+                    path += b[1:]
+                else:
+                    path += b
+            elif path[-1] == ":":
+                path += b
+            elif b:
+                if b[0] in "/\\":
+                    path += b
+                else:
+                    path += "\\" + b
 
     return path
 
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 7386900..fe997b3 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -66,6 +66,13 @@
 tester('ntpath.join("a", "b\\", "c")', 'a\\b\\c')
 tester('ntpath.join("a", "b", "\\c")', '\\c')
 tester('ntpath.join("d:\\", "\\pleep")', 'd:\\pleep')
+tester('ntpath.join("d:\\", "a", "b")', 'd:\\a\\b')
+tester("ntpath.join('c:', '/a')", 'c:/a')
+tester("ntpath.join('c:/', '/a')", 'c:/a')
+tester("ntpath.join('c:/a', '/b')", '/b')
+tester("ntpath.join('c:', 'd:/')", 'd:/')
+tester("ntpath.join('c:/', 'd:/')", 'd:/')
+tester("ntpath.join('c:/', 'd:/a/b')", 'd:/a/b')
 
 if errors:
     raise TestFailed(str(errors) + " errors.")