Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/Proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/proton
diff options
context:
space:
mode:
authorAndrew Eikum <aeikum@codeweavers.com>2022-02-09 20:11:11 +0300
committerArkadiusz Hiler <ahiler@codeweavers.com>2022-02-25 14:52:40 +0300
commit17683bff97d3ca20e8f1ee1068fcf286337be7da (patch)
tree8276f2badb23466868b0f345ad8d7ec41a478dd8 /proton
parent90a11aca8ede4840364604a3ca5dc5f1fd947983 (diff)
proton: Better handle broken symlinks
Diffstat (limited to 'proton')
-rwxr-xr-xproton23
1 files changed, 13 insertions, 10 deletions
diff --git a/proton b/proton
index cdb8f870..69fc41af 100755
--- a/proton
+++ b/proton
@@ -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)