Branch: refs/heads/smoke-me/tonyc/win32-symlink Home: https://github.com/Perl/perl5 Commit: 075922ac423c648207748f8c639327e783ec493e https://github.com/Perl/perl5/commit/075922ac423c648207748f8c639327e783ec493e Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020)
Changed paths: M MANIFEST M dosish.h M t/op/stat.t A t/win32/stat.t M win32/config.gc M win32/config.vc M win32/config_H.gc M win32/config_H.vc M win32/perlhost.h M win32/win32.c M win32/win32.h M win32/win32iop.h Log Message: ----------- Win32: add lstat(), fetch st_dev and st_ino and fetch st_nlink for fstat We need lstat() for various modules to work well with symlinks, and the same modules often want to check for matches on the device and inode number. The values we're using for st_ino match those that the Python and Rust libraries use, and Go uses the same volume and file index values for testing if two stat objects refer to the same file. They aren't entirely unique, given ReFS uses 128-bit file ids, but the API used to check for this (GetFileInformationByHandleEx() for FileIdInfo) is only available on server operating systems, so I can't directly test it anyway. Commit: e562984b0123ff472f1dd792769d72ab8593c4d2 https://github.com/Perl/perl5/commit/e562984b0123ff472f1dd792769d72ab8593c4d2 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M MANIFEST M iperlsys.h M pod/perlport.pod M pp_sys.c M t/op/stat.t A t/win32/symlink.t M win32/Makefile M win32/config.gc M win32/config.vc M win32/config_H.gc M win32/config_H.vc M win32/config_h.PL M win32/perlhost.h M win32/win32.c M win32/win32iop.h Log Message: ----------- Win32: implement symlink() and readlink() The API used requires Windows Vista or later, but is called in such a way that perl can still be used on older Windows. The API itself requires either elevated privileges or a sufficiently recent version of Windows 10 running in "Developer Mode", so some tests require updates. Commit: 1a0c68b0c01122738ea4df7e895626a3e1957584 https://github.com/Perl/perl5/commit/1a0c68b0c01122738ea4df7e895626a3e1957584 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M pod/perlport.pod M t/win32/stat.t M win32/win32.c Log Message: ----------- Win32: implement our own stat(), and hence our own utime This fixes at least two problems: - unlike UCRT, the MSVCRT used for gcc builds has a bug converting a FILETIME in an unlike current DST state, returning a time offset by an hour. Fixes GH #6080 - the MSVCRT apparently uses FindFirstFile() to fetch file information, but this doesn't follow symlinks(), so stat() ends up returning information about the symlink(), not the underlying file. This isn't an issue with the UCRT which opens the file as this implementation does. Currently this code calculates the time_t for st_*time, and the other way for utime() using a simple multiplication and offset between time_t and FILETIME values, but this may be incorrect if leap seconds are enabled. This code also requires Vista or later. Some of this is based on code by Tomasz Konojacki (xenu). Commit: 4532f3ebe3cf686969b7c60424e70afcccceea9d https://github.com/Perl/perl5/commit/4532f3ebe3cf686969b7c60424e70afcccceea9d Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M dist/PathTools/Cwd.xs M dist/PathTools/t/cwd.t Log Message: ----------- PathTools: use PerlLIO_*() functions and chdir() on a symlink differences Use PerlLIO_lstat() and PerlLIO_readlink() instead of directly calling the POSIX names, so our Win32 overrides work. For the test, unlike POSIX, changing directory via a symlink on Win32 appears to store the symlink as part of the current directory rather so GetCurrentDirectory() fetches that rather than the hardlinked path. Commit: 9ef4512f4673ebb1bf2b7e7785494e23cda95a30 https://github.com/Perl/perl5/commit/9ef4512f4673ebb1bf2b7e7785494e23cda95a30 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M ext/File-Find/t/find.t Log Message: ----------- File::Find find.t: switch to done_testing() Commit: 9d66b39b02ae1324fffc2ed7e94cf5929ae865d6 https://github.com/Perl/perl5/commit/9d66b39b02ae1324fffc2ed7e94cf5929ae865d6 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M ext/File-Find/lib/File/Find.pm M ext/File-Find/t/find.t M ext/File-Find/t/lib/Testing.pm M ext/File-Find/t/taint.t Log Message: ----------- File::Find: support Win32 symlinks find.t, taint.t: check that symlink() works under the current permissions/filesystem rather than assuming it will work find.t: since symlinks are now available, an earlier test block set $FileFileTests_OK, and the tests in this Win32 block don't use either of the follow options, which is required for fast file tests. taint.t: ensure we get / separated names to match File::Find's output Commit: 14d426af3b38a89b9a2184eb5347fe1e8870ffbb https://github.com/Perl/perl5/commit/14d426af3b38a89b9a2184eb5347fe1e8870ffbb Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M lib/File/Copy.pm M lib/File/Copy.t Log Message: ----------- File::Copy: support symlinks on Win32 Commit: 64c87b8d626e32ac09adee228b45120a5a630d9f https://github.com/Perl/perl5/commit/64c87b8d626e32ac09adee228b45120a5a630d9f Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M win32/win32.c Log Message: ----------- Win32: re-work FILETIME <=> time_t conversions Current versions of Windows claim to support leap seconds, but the time conversion I was using ignores that possibility. Switch to using APIs (FileTimeToSystemTime() and SystemTimeToFileTime()) that are documented to support leap seconds that might be included in a FILETIME. Commit: defd727fe8d083d1790fad51454c83338b77e830 https://github.com/Perl/perl5/commit/defd727fe8d083d1790fad51454c83338b77e830 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M win32/win32.c Log Message: ----------- win32 symlink: only use the unprivileged flag if windows is new enough Commit: 5e320b49cf65d3c9bca2a7f0f27943c4a2c51983 https://github.com/Perl/perl5/commit/5e320b49cf65d3c9bca2a7f0f27943c4a2c51983 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M mg.c M pod/perlvar.pod M win32/win32.c M win32/win32.h Log Message: ----------- remove ${^WIN32_SLOPPY_STAT} The new implementation, like the UCRT implementation, always opens the specified file. Commit: 0934bd17c591ca2c5a2066ccba4b45a43d2eedfa https://github.com/Perl/perl5/commit/0934bd17c591ca2c5a2066ccba4b45a43d2eedfa Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M pod/perlport.pod M t/win32/stat.t M t/win32/symlink.t M win32/win32.c Log Message: ----------- lstat(), readlink() and unlink() treat directory junctions as symlinks Commit: b7f0d20551ffaf55441f694b8e88c934082e2b3d https://github.com/Perl/perl5/commit/b7f0d20551ffaf55441f694b8e88c934082e2b3d Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M win32/GNUmakefile M win32/Makefile M win32/config_H.gc M win32/config_H.vc M win32/config_sh.PL M win32/makefile.mk Log Message: ----------- Win32: don't include version specific config for prebuilt config_h.* This fixes the problem where doing a regen_config_h with a compiler that supports stdbool.h would generate a config_h.* that would result in a build failure on older compilers that didn't support stdbool.h. Commit: c17f90b6e0848996553f5604aed201a917c19d67 https://github.com/Perl/perl5/commit/c17f90b6e0848996553f5604aed201a917c19d67 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M win32/win32.c Log Message: ----------- Win32: try to make the new stat pre-Vista compatible the win32\stat.t execute flag test will still fail This is intended mostly for allowing the Win2000 smoker to build and test. If we end up dropping pre-Vista support this commit can be removed (or reverted if it ends up in blead) Commit: b5d680daa093e5f28f0ae89b4006b7c252b25cbc https://github.com/Perl/perl5/commit/b5d680daa093e5f28f0ae89b4006b7c252b25cbc Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M t/op/taint.t Log Message: ----------- t/op/taint.t: handle symlink requiring anything unavailable like privileges, or a filesystem without symlink support Commit: 849b785af31a836ecec08126848df7b4d4962367 https://github.com/Perl/perl5/commit/849b785af31a836ecec08126848df7b4d4962367 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-04 (Wed, 04 Nov 2020) Changed paths: M Porting/Maintainers.pl M cpan/Test-Harness/t/source.t M t/porting/customized.dat Log Message: ----------- Test-Harness: don't assume symlink succeeds https://github.com/Perl-Toolchain-Gang/Test-Harness/pull/103 upstream which has been applied but not released. Compare: https://github.com/Perl/perl5/compare/9b69397269bc...849b785af31a