@@ -117,9 +117,12 @@ def split(p):
117
117
def splitext (p ):
118
118
p = os .fspath (p )
119
119
if isinstance (p , bytes ):
120
- return genericpath ._splitext (p , b'/' , None , b'.' )
120
+ sep = b'/'
121
+ extsep = b'.'
121
122
else :
122
- return genericpath ._splitext (p , '/' , None , '.' )
123
+ sep = '/'
124
+ extsep = '.'
125
+ return genericpath ._splitext (p , sep , None , extsep )
123
126
splitext .__doc__ = genericpath ._splitext .__doc__
124
127
125
128
# Split a pathname into a drive specification and the rest of the
@@ -240,11 +243,12 @@ def expanduser(path):
240
243
# pwd module unavailable, return path unchanged
241
244
return path
242
245
try :
243
- userhome = pwd .getpwuid ( os . getuid ()). pw_dir
246
+ pwent = pwd .getpwnam ( name )
244
247
except KeyError :
245
248
# bpo-10496: if the current user identifier doesn't exist in the
246
249
# password database, return the path unchanged
247
250
return path
251
+ userhome = pwent .pw_dir
248
252
else :
249
253
userhome = os .environ ['HOME' ]
250
254
else :
@@ -352,16 +356,19 @@ def normpath(path):
352
356
if not path :
353
357
return dot
354
358
_ , initial_slashes , path = splitroot (path )
359
+ comps = path .split (sep )
355
360
new_comps = []
356
- for comp in path . split ( sep ) :
361
+ for comp in comps :
357
362
if not comp or comp == dot :
358
363
continue
359
364
if (comp != dotdot or (not initial_slashes and not new_comps ) or
360
365
(new_comps and new_comps [- 1 ] == dotdot )):
361
366
new_comps .append (comp )
362
367
elif new_comps :
363
368
new_comps .pop ()
364
- return (initial_slashes + sep .join (new_comps )) or dot
369
+ comps = new_comps
370
+ path = initial_slashes + sep .join (comps )
371
+ return path or dot
365
372
else :
366
373
def normpath (path ):
367
374
"""Normalize path, eliminating double slashes, etc."""
0 commit comments