Closed monyarm closed 3 years ago
Repeating what I said on Discord for future reference, I thought this is probably due to me misunderstanding what std::filesystem::canonical()
does on a case-insensitive filesystem, I think I expected it to return the true case of a given path (since the path must exist for the function to return).
However, it turns out I actually wrote a test for this, and that is the behaviour on Windows (possibly only on NTFS): but it doesn't seem to be the case when running through Wine on Linux on some unknown filesystem, and any of them might be responsible for the difference. I need to do more investigation.
@monyarm What kind of filesystem do you have Skyrim SE installed on, and are you running it with any unusual config (e.g. case insensitivity), so I can try replicating it?
I'm running it on ext4 with casefold (aka case insensitivity). I can also get you my exact kernel and wine/proton versions if you need them.
Another thing I've done that is unusual, is that rather than logging in and downloading the CC content from withing the game, I instead just copied the bsas and plugins from my other pc. (I'm on rural internet).
On Sun, Mar 21, 2021, 12:22 AM Oliver Hamlet @.***> wrote:
Repeating what I said on Discord for future reference, I thought this is probably due to me misunderstanding what std::filesystem::canonical() does on a case-insensitive filesystem, I think I expected it to return the true case of a given path (since the path must exist for the function to return).
However, it turns out I actually wrote a test for this, and that is the behaviour on Windows (possibly only on NTFS): but it doesn't seem to be the case when running through Wine on Linux on some unknown filesystem, and any of them might be responsible for the difference. I need to do more investigation.
@monyarm https://github.com/monyarm What kind of filesystem do you have Skyrim SE installed on, and are you running it with any unusual config (e.g. case insensitivity), so I can try replicating it?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/loot/libloot/issues/74#issuecomment-803471969, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXHJKQ7K3UV65XQJOSZOPDTEUNZVANCNFSM4ZQ2R75Q .
-/oyddmdhs+:. monyarm@monyarm-laptop
-odNMMMMMMMMNNmhy+-` ----------------------
-yNMMMMMMMMMMMNNNmmdhy+- OS: Gentoo Base System release 2.7 x86_64
`omMMMMMMMMMMMMNmdmmmmddhhy/` Host: 80WK Lenovo Y520-15IKBN
omMMMMMMMMMMMNhhyyyohmdddhhhdo` Kernel: 5.11.0+
.ydMMMMMMMMMMdhs++so/smdddhhhhdm+` Uptime: 3 days, 3 hours, 25 mins
oyhdmNMMMMMMMNdyooydmddddhhhhyhNd. Packages: 1 (rpm), 1514 (emerge)
:oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh Shell: zsh 5.8
.:+sydNMMMMMNNNmmmdddhhhhhhmMmy Resolution: 1920x1080
/mMMMMMMNNNmmmdddhhhhhmMNhs: DE: Plasma 5.20.5
`oNMMMMMMMNNNmmmddddhhdmMNhs+` WM: KWin
`sNMMMMMMMMNNNmmmdddddmNMmhs/. WM Theme: Breeze
/NMMMMMMMMNNNNmmmdddmNMNdso:` Theme: Breeze Dark [Plasma], Breeze [GTK2/3]
+MMMMMMMNNNNNmmmmdmNMNdso/- Icons: Tela-dark [Plasma], Tela-dark [GTK2/3]
yMMNNNNNNNmmmmmNNMmhs+/-` Terminal: konsole
/hMMNNNNNNNNMNdhs++/-` CPU: Intel i7-7700HQ (8) @ 3.800GHz
`/ohdmmddhys+++/:.` GPU: NVIDIA GeForce GTX 1050 Ti Mobile
`-//////:--. GPU: Intel HD Graphics 630
Memory: 3055MiB / 7848MiB
Kernel is 5.11 tkg-linux, with all the default patches, plus the futex2 patch, compiled with 03 and mtune and march. Wine/Proton Version is proton_tkg_6.2.r0.g3b5ea332, with the following non-standard config settings:
_mtga_fix="true"
_community_patches="amdags-proton.mypatch origin_downloads_e4ca5dbe_revert.mypatch ID3DXEffectCompiler-partial-implementation.mypatch ntdll_Map_top-down_if_dll_characteristics_include_DYNAMIC_BASE.mypatch fsync_futex2.mypatch wine-fix-gcc10.mypatch Shell32-CreateDirectoryInDestinationInFileOp-Move-multiop.mypatch"
Actually, wait, that's my global wine/proton version, but I just remembered that I'm using a different version for Vortex itself (and all software run through it, like loot), that being Wine 5.21-lutris. Which is a more standard wine version.
I'm able to replicate this in an Ubuntu VM and Wine 6.0 after mounting an ext4 filesystem with casefold enabled and setting up a dummy Skyrim SE game in a directory that has case folding enabled. I think the problem is that std::filesystem::canonical()
is modelled after POSIX's realpath
, which doesn't output the path's "true" case when case folding is in use.
I've replaced the usage of canonical()
, @monyarm can you try replacing the libloot DLL in your LOOT install with this libloot DLL?
It worked, now i can finally mod my game again.
OK, closing this as it's fixed by 505106d602caf0c2825d613f7bc7b1f9aad7527f.
I'm running loot on linux, through wine. Same issue occurs with all CC esls. Loot debug log: https://drive.google.com/file/d/1QauUiNgyiOQ-g6uXDCEvXQUffTL8Lx4T/view?usp=drivesdk