diff options
author | Andrew Eikum <aeikum@codeweavers.com> | 2022-02-09 20:11:11 +0300 |
---|---|---|
committer | Arkadiusz Hiler <ahiler@codeweavers.com> | 2022-02-25 14:52:40 +0300 |
commit | 17683bff97d3ca20e8f1ee1068fcf286337be7da (patch) | |
tree | 8276f2badb23466868b0f345ad8d7ec41a478dd8 /proton | |
parent | 90a11aca8ede4840364604a3ca5dc5f1fd947983 (diff) |
proton: Better handle broken symlinks
Diffstat (limited to 'proton')
-rwxr-xr-x | proton | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -89,6 +89,9 @@ def file_is_wine_builtin_dll(path): def makedirs(path): try: + #replace broken symlinks with a new directory + if os.path.islink(path) and not file_exists(path, follow_symlinks=True): + os.remove(path) os.makedirs(path) except OSError: #already exists @@ -405,7 +408,7 @@ class CompatData: dirs = [] for f in tracked_files: path = self.prefix_dir + f.strip() - if file_exists(path, follow_symlinks=True): + if file_exists(path, follow_symlinks=False): if os.path.isfile(path) or os.path.islink(path): os.remove(path) else: @@ -570,8 +573,8 @@ class CompatData: if len(rel_dir) > 0: rel_dir = rel_dir + "/" dst_dir = src_dir.replace(g_proton.default_pfx_dir, self.prefix_dir, 1) - if not file_exists(dst_dir, follow_symlinks=False): - os.makedirs(dst_dir) + if not file_exists(dst_dir, follow_symlinks=True): + makedirs(dst_dir) tracked_files.write(rel_dir + "\n") for dir_ in dirs: src_file = os.path.join(src_dir, dir_) @@ -602,8 +605,8 @@ class CompatData: if len(rel_dir) > 0: rel_dir = rel_dir + "/" dst_dir = src_dir.replace(g_proton.default_pfx_dir, self.prefix_dir, 1) - if not file_exists(dst_dir, follow_symlinks=False): - os.makedirs(dst_dir) + if not file_exists(dst_dir, follow_symlinks=True): + makedirs(dst_dir) tracked_files.write(rel_dir + "\n") for file_ in files: src_file = os.path.join(src_dir, file_) @@ -883,13 +886,13 @@ class CompatData: else: nvapi64_dll = self.prefix_dir + "drive_c/windows/system32/nvapi64.dll" nvapi32_dll = self.prefix_dir + "drive_c/windows/syswow64/nvapi.dll" - if file_exists(nvapi64_dll, follow_symlinks=True): + if file_exists(nvapi64_dll, follow_symlinks=False): os.unlink(nvapi64_dll) - if file_exists(nvapi64_dll + '.debug', follow_symlinks=True): + if file_exists(nvapi64_dll + '.debug', follow_symlinks=False): os.unlink(nvapi64_dll + '.debug') - if file_exists(nvapi32_dll, follow_symlinks=True): + if file_exists(nvapi32_dll, follow_symlinks=False): os.unlink(nvapi32_dll) - if file_exists(nvapi32_dll + '.debug', follow_symlinks=True): + if file_exists(nvapi32_dll + '.debug', follow_symlinks=False): os.unlink(nvapi32_dll + '.debug') # Try to detect known DLLs that ship with the NVIDIA Linux Driver @@ -1032,7 +1035,7 @@ class Session: lfile_path = basedir + "/steam-" + os.environ["SteamGameId"] + ".log" - if file_exists(lfile_path, follow_symlinks=True): + if file_exists(lfile_path, follow_symlinks=False): os.remove(lfile_path) makedirs(basedir) |