Branch: refs/heads/blead Home: https://github.com/Perl/perl5 Commit: 92b3a3ebc05e3ce0e84a1ccff46487ca2200b471 https://github.com/Perl/perl5/commit/92b3a3ebc05e3ce0e84a1ccff46487ca2200b471 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 680b2c5ee3b53c627074192b3cf14416a24da6ea https://github.com/Perl/perl5/commit/680b2c5ee3b53c627074192b3cf14416a24da6ea Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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/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. 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: e935ef333b3eab54a766de93fad1369f76ddea49 https://github.com/Perl/perl5/commit/e935ef333b3eab54a766de93fad1369f76ddea49 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 12a8085aee9a1a5ac613205b43ea06406736ac6b https://github.com/Perl/perl5/commit/12a8085aee9a1a5ac613205b43ea06406736ac6b Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M dist/PathTools/Cwd.pm M dist/PathTools/Cwd.xs M dist/PathTools/lib/File/Spec.pm M dist/PathTools/lib/File/Spec/AmigaOS.pm M dist/PathTools/lib/File/Spec/Cygwin.pm M dist/PathTools/lib/File/Spec/Epoc.pm M dist/PathTools/lib/File/Spec/Functions.pm M dist/PathTools/lib/File/Spec/Mac.pm M dist/PathTools/lib/File/Spec/OS2.pm M dist/PathTools/lib/File/Spec/Unix.pm M dist/PathTools/lib/File/Spec/VMS.pm M dist/PathTools/lib/File/Spec/Win32.pm 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: a0ced391f0a77a8d66c8cba046a923721e0dd52b https://github.com/Perl/perl5/commit/a0ced391f0a77a8d66c8cba046a923721e0dd52b Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M ext/File-Find/t/find.t Log Message: ----------- File::Find find.t: switch to done_testing() Commit: 0d00729c03a1f68e1b51e986d1ce9000b0e3d301 https://github.com/Perl/perl5/commit/0d00729c03a1f68e1b51e986d1ce9000b0e3d301 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 520fd6d3ecf7b0cec09bae8a26b939b7ed485bbf https://github.com/Perl/perl5/commit/520fd6d3ecf7b0cec09bae8a26b939b7ed485bbf Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M lib/File/Copy.pm M lib/File/Copy.t Log Message: ----------- File::Copy: support symlinks on Win32 Commit: 690ab4ba4bc90fa2f43c03eb418c3dc163f57ea8 https://github.com/Perl/perl5/commit/690ab4ba4bc90fa2f43c03eb418c3dc163f57ea8 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 17ab6b6399dbe07e478478e9eba9aeb345eab2ed https://github.com/Perl/perl5/commit/17ab6b6399dbe07e478478e9eba9aeb345eab2ed Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M win32/win32.c Log Message: ----------- win32 symlink: only use the unprivileged flag if windows is new enough Commit: 203831af1a745c76df85e12f4a1cf47e5bddf3ff https://github.com/Perl/perl5/commit/203831af1a745c76df85e12f4a1cf47e5bddf3ff Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 2bfb75d20f6d643150258ffdbe1647239cb5f69a https://github.com/Perl/perl5/commit/2bfb75d20f6d643150258ffdbe1647239cb5f69a Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: d9f9953f74a41a404d61c6ddef3ed682eec1aa1c https://github.com/Perl/perl5/commit/d9f9953f74a41a404d61c6ddef3ed682eec1aa1c Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 7c04651411221e54ce561cd41ae8fa76347bbd5a https://github.com/Perl/perl5/commit/7c04651411221e54ce561cd41ae8fa76347bbd5a Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M win32/win32.c Log Message: ----------- pre-vista support for win32_symlink Commit: 9a1250917f0a11e197e9776a3baee0aa232ea2ed https://github.com/Perl/perl5/commit/9a1250917f0a11e197e9776a3baee0aa232ea2ed Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M t/win32/stat.t M win32/win32.c Log Message: ----------- Win32: try to make the new stat pre-Vista compatible Skips the win32\stat.t execute flag test for handles pre-Vista 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: 7e6c9456ae41721f3054e84eb60242e86219542a https://github.com/Perl/perl5/commit/7e6c9456ae41721f3054e84eb60242e86219542a Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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: 72aac62720fdd7ad8838984e8ca7cf2dedb7a776 https://github.com/Perl/perl5/commit/72aac62720fdd7ad8838984e8ca7cf2dedb7a776 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 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. Commit: a2e9e863ec01c95edbb270bcf28d1869d7cedf5b https://github.com/Perl/perl5/commit/a2e9e863ec01c95edbb270bcf28d1869d7cedf5b Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M t/win32/symlink.t M win32/win32.c Log Message: ----------- win32 symlink: treats paths that look like directories as directories Commit: 0d2c9baa1c18fc5a6d8d8a4668a207fe030f87a2 https://github.com/Perl/perl5/commit/0d2c9baa1c18fc5a6d8d8a4668a207fe030f87a2 Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M win32/win32.c Log Message: ----------- win32 symlink: reindent Commit: b277e767f3a3d9af20f138a95c26625cf2dfb53a https://github.com/Perl/perl5/commit/b277e767f3a3d9af20f138a95c26625cf2dfb53a Author: Tony Cook <t...@develop-help.com> Date: 2020-12-01 (Tue, 01 Dec 2020) Changed paths: M MANIFEST M Porting/Maintainers.pl M cpan/Test-Harness/t/source.t M dist/PathTools/Cwd.pm M dist/PathTools/Cwd.xs M dist/PathTools/lib/File/Spec.pm M dist/PathTools/lib/File/Spec/AmigaOS.pm M dist/PathTools/lib/File/Spec/Cygwin.pm M dist/PathTools/lib/File/Spec/Epoc.pm M dist/PathTools/lib/File/Spec/Functions.pm M dist/PathTools/lib/File/Spec/Mac.pm M dist/PathTools/lib/File/Spec/OS2.pm M dist/PathTools/lib/File/Spec/Unix.pm M dist/PathTools/lib/File/Spec/VMS.pm M dist/PathTools/lib/File/Spec/Win32.pm M dist/PathTools/t/cwd.t M dosish.h 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 M iperlsys.h M lib/File/Copy.pm M lib/File/Copy.t M mg.c M pod/perlport.pod M pod/perlvar.pod M pp_sys.c M t/op/stat.t M t/op/taint.t M t/porting/customized.dat A t/win32/stat.t A t/win32/symlink.t M win32/GNUmakefile M win32/Makefile M win32/config.gc M win32/config.vc M win32/config_H.gc M win32/config_H.vc M win32/config_sh.PL M win32/makefile.mk M win32/perlhost.h M win32/win32.c M win32/win32.h M win32/win32iop.h Log Message: ----------- Implement symlink(), lstat() and readlink() on Win32 Compare: https://github.com/Perl/perl5/compare/c1ec4bdd803f...b277e767f3a3