https://bugs.winehq.org/show_bug.cgi?id=50036
Erich E. Hoover erich.e.hoover@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #68679|0 |1 is obsolete| |
--- Comment #11 from Erich E. Hoover erich.e.hoover@gmail.com --- Created attachment 68683 --> https://bugs.winehq.org/attachment.cgi?id=68683 Basic system dll symlink implementation
Okay, the wife let me spend way more time on this then I thought she would. Attached is a patch with a basic implementation allowing the Wine system dlls to be reparse points. Please note that this patch requires the staging patches for reparse point support.
The implementation occurs in three key places: server/fd.c: ignoring FILE_OPEN_REPARSE_POINT in open_fd dlls/ntdll/unix/file.c: hiding the symlink in get_file_info dlls/setupapi/fakedll.c: installing the dlls as a symlink in install_fake_dll
And this results in a rather substantial change in prefix size. === before === ehoover@lappy:~/src/wine-test$ du --max-depth=0 -h ~/.wine 451M /home/ehoover/.wine === after === ehoover@lappy:~/src/wine-test$ du --max-depth=0 -h ~/.wine 136M /home/ehoover/.wine ===
If you are interested in seeing what happens if you turn the symlink hiding behavior on/off you can change IO_REPARSE_TAG_WINE to IO_REPARSE_TAG_SYMLINK in dlls/setupapi/fakedll.c. An example of how you can see the difference in behavior is by looking at the directory listing for system32 in wine cmd: === IO_REPARSE_TAG_WINE === ... 11/22/2020 9:56 AM 339,749 xolehlp.dll 11/22/2020 9:56 AM 61,719 xpsprint.dll 11/22/2020 9:56 AM 57,863 xpssvcs.dll === IO_REPARSE_TAG_SYMLINK === ... 11/22/2020 10:50 AM <SYMLINK> xolehlp.dll [Z:\usr\local\lib\wine\xolehlp.dll] 11/22/2020 10:50 AM <SYMLINK> xpsprint.dll [Z:\usr\local\lib\wine\xpsprint.dll] 11/22/2020 10:50 AM <SYMLINK> xpssvcs.dll [Z:\usr\local\lib\wine\xpssvcs.dll] ===