mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	added rewritten normpath from Moshe Zadka that does the right thing with
paths containing ..
This commit is contained in:
		
							parent
							
								
									7cb1524586
								
							
						
					
					
						commit
						018dfae246
					
				
					 1 changed files with 18 additions and 23 deletions
				
			
		|  | @ -346,30 +346,25 @@ def expandvars(path): | |||
| 
 | ||||
| def normpath(path): | ||||
|     """Normalize path, eliminating double slashes, etc.""" | ||||
|     if path == '': | ||||
|         return '.' | ||||
|     import string | ||||
|     # Treat initial slashes specially | ||||
|     slashes = '' | ||||
|     while path[:1] == '/': | ||||
|         slashes = slashes + '/' | ||||
|         path = path[1:] | ||||
|     comps = string.splitfields(path, '/') | ||||
|     i = 0 | ||||
|     while i < len(comps): | ||||
|         if comps[i] == '.': | ||||
|             del comps[i] | ||||
|             while i < len(comps) and comps[i] == '': | ||||
|                 del comps[i] | ||||
|         elif comps[i] == '..' and i > 0 and comps[i-1] not in ('', '..'): | ||||
|             del comps[i-1:i+1] | ||||
|             i = i-1 | ||||
|         elif comps[i] == '' and i > 0 and comps[i-1] <> '': | ||||
|             del comps[i] | ||||
|         else: | ||||
|             i = i+1 | ||||
|     # If the path is now empty, substitute '.' | ||||
|     if not comps and not slashes: | ||||
|         comps.append('.') | ||||
|     return slashes + string.joinfields(comps, '/') | ||||
|     initial_slash = (path[0] == '/') | ||||
|     comps = string.split(path, '/') | ||||
|     new_comps = [] | ||||
|     for comp in comps: | ||||
|         if comp in ('', '.'): | ||||
|             continue | ||||
|         if (comp != '..' or (not initial_slash and not new_comps) or  | ||||
|              (new_comps and new_comps[-1] == '..')): | ||||
|             new_comps.append(comp) | ||||
|         elif new_comps: | ||||
|             new_comps.pop() | ||||
|     comps = new_comps | ||||
|     path = string.join(comps, '/') | ||||
|     if initial_slash: | ||||
|         path = '/' + path | ||||
|     return path or '.' | ||||
| 
 | ||||
| 
 | ||||
| def abspath(path): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Skip Montanaro
						Skip Montanaro