Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Verify Integrity of Game Cache ignores filename capitalisation #577
Verify Integrity of Game Cache will claim that all files successfully verify even if some of the filenames have the incorrect case. This may happen under certain circumstances when copying the files off a filesystem that is not case sensitive, such as ntfs or vfat, or when those filesystems have been mounted with certain options (e.g. lowntfs).
For testing, this script can be used to recursively rename all files in a directory to lower case: https://raw.github.com/DarkStarSword/junk/master/steam/breakcase.py
I also have written a script that can rename all the files to the correct case listed in the .manifest files, announcement here: http://steamcommunity.com/app/221410/discussions/0/846941710185740762/
After running the above breakcase.py script on the Osmos directory, I get the following error when trying to launch it:
Yet running verify integrity of game cache still reports "All files successfully validated"
If I then rename osmos to Osmos and osmos.bin32 to Osmos.bin32 and launch the game it does launch, but all the graphics are messed up - lots of quadrilateral shapes are drawn on the screen, but no text is drawn and it is impossible to work out what is going on - essentially Osmos can't find it's textures. Running my abovementioned check_acf.py script with --rename then allows Osmos to work properly again.
I would propose that the verify integrity of game cache feature is extended to rename files to correct any capitalisation issues in a similar manner to my check_acf.py script.
There may still be some edge cases if the filesystem that SteamApps is mounted on is case insensitive (such as using mount -t lowntfs instead of mount -t ntfs3g).
referenced this issue
Jan 7, 2013
Had two users in group chat have this problem so far after copying Team Fortress 2 from their Windows library to their Linux one, its a case issue so verification didn’t highlight the problem. Though, like Issue #123 it might just be labelled unsupported.
I've noticed some oddities when downloading Half-Life (Beta) and Psychonauts in the Linux client where the case of some directories that Steam creates does not match that in the manifest files.
I'm not sure if this is a mismatch within the manifest files or something else, but it certainly makes things... interesting. Let me know if any of this belongs in a new bug report.
Left side is the filename on disk, right side is the capitalisation from 3840_3963299974783782956.manifest:
Psychonauts/documents - Documents
Half Life is a bit more interesting since it has multiple manifest files with contradicting capitalisation:
My script isn't explicitly looking for these kind of contradictions, so there may be others that it didn't pick up.
This seems to also seems to be an issue when receiving updates to games. Within the past 6 months or so, I've had two games (Crypt of the NecroDancer and Grim Fandango Remastered) have filename case changes which weren't propagated to my Linux game cache. In both of these cases, it resulted in game breaking behaviour.
I see that this issue was marked as assigned over a year ago. Has there been any progress with getting it fixed in the client?
Filesystem space issues due to this bug. Dual booting and sharing game library folder creates duplicated files with different case in Linux even though they were updated in Windows. Windows sees only the one file but the file system knows the other case mismatched file exists. Storage space is being mishandled and used when it shouldn't be. Dual boot SteamOS likely will have similar issues.
@CoolSilver sharing a library between Windows and Linux is not recommended - for some games it works OK, but others had issues if the same files exist in both Windows and Linux depots with differing content causing them to require updates whenever switching OS.
It is reasonable to copy the Windows install to a separate Linux library (or vice versa) to reduce redownloading identical files though, with the caveat that the filenames from Windows may not have the correct case (hence my check_acf.py script to fix them).
It's a bit late to mention it, but this bug wreaked havoc with Firewatch's launch. It allowed a filename case change to the binary to slip under the radar, and resulted in users being unable to play for several hours while we tried to work out a nice solution that wouldn't trigger an entire re-download of the game for Linux users ( we couldn't find one ).