mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	fix bug #114290: when interpreter's argv[0] has a relative path make
it absolute by joining it with getcwd result.  avoid including
    unnecessary ./ in path but do not test for ../ (more complicated)
			
			
This commit is contained in:
		
							parent
							
								
									38bfc4d0d5
								
							
						
					
					
						commit
						7198ba986d
					
				
					 1 changed files with 19 additions and 2 deletions
				
			
		| 
						 | 
					@ -219,6 +219,23 @@ joinpath(char *buffer, char *stuff)
 | 
				
			||||||
    buffer[n+k] = '\0';
 | 
					    buffer[n+k] = '\0';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					init_path_from_argv0(char *path, char *argv0_path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (argv0_path[0] == '/')
 | 
				
			||||||
 | 
						strcpy(path, argv0_path);
 | 
				
			||||||
 | 
					    else if (argv0_path[0] == '.') {
 | 
				
			||||||
 | 
						getcwd(path, MAXPATHLEN);
 | 
				
			||||||
 | 
						if (argv0_path[1] == '/') 
 | 
				
			||||||
 | 
						    joinpath(path, argv0_path + 2);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						    joinpath(path, argv0_path);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
						getcwd(path, MAXPATHLEN);
 | 
				
			||||||
 | 
						joinpath(path, argv0_path);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
search_for_prefix(char *argv0_path, char *home)
 | 
					search_for_prefix(char *argv0_path, char *home)
 | 
				
			||||||
| 
						 | 
					@ -264,7 +281,7 @@ search_for_prefix(char *argv0_path, char *home)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Search from argv0_path, until root is found */
 | 
					    /* Search from argv0_path, until root is found */
 | 
				
			||||||
    strcpy(prefix, argv0_path);
 | 
					    init_path_from_argv0(prefix, argv0_path);
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
        n = strlen(prefix);
 | 
					        n = strlen(prefix);
 | 
				
			||||||
        joinpath(prefix, lib_python);
 | 
					        joinpath(prefix, lib_python);
 | 
				
			||||||
| 
						 | 
					@ -314,7 +331,7 @@ search_for_exec_prefix(char *argv0_path, char *home)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Search from argv0_path, until root is found */
 | 
					    /* Search from argv0_path, until root is found */
 | 
				
			||||||
    strcpy(exec_prefix, argv0_path);
 | 
					    init_path_from_argv0(exec_prefix, argv0_path);
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
        n = strlen(exec_prefix);
 | 
					        n = strlen(exec_prefix);
 | 
				
			||||||
        joinpath(exec_prefix, lib_python);
 | 
					        joinpath(exec_prefix, lib_python);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue