LRFLEW / OpenRCT2Launcher

An Open Source Launcher & Updater for OpenRCT2
MIT License
200 stars 20 forks source link

Support for unarchiving symbolic links #63

Open adam-bloom opened 2 years ago

adam-bloom commented 2 years ago

Both zip and tar allow for symbolic links to be included in archives as links, and not just as files. The launcher does not currently handle unarchiving correctly when symbolic links are encountered. As an example, the latest develop macOS archive contains the following symlink:

lrwxr-xr-x@ 1 Adam  staff    16B Oct 10 15:06 libzip.5.dylib -> libzip.5.3.dylib

The above link was extracted using the default macOS Archive Utility, but similar results are seen when invoking unzip directly from the command line.

Using the launcher, we get the following:

-rw-r--r--@ 1 Adam  staff    16B Oct 11 16:25 libzip.5.dylib

The file was extracted, but not as a symlink.

naterinder commented 2 years ago

As of today, this breaks launching the game with the latest stable release (0.3.5).

LRFLEW commented 2 years ago

I'll start working on this. Honestly, handling symlinks in the ZIP format is kinda tricky, as it isn't as clearly standardized as I'd hope.

Honestly, I need to replace all the archive handling code in here with a library like libarchive. I had avoided it at the time because combining external dependencies with QMake was a nightmare, but I should just switch to CMake, which with solve that issue altogether. It might take some time, since I should also switch everything to using Github Actions.

phu54321 commented 2 years ago

Maybe simple fix? Treat all .dylib containing a single string as symlink, and symlink to "appropriate" dylib.

image