Branch: refs/heads/smoke-me/tonyc/win32-symlink Home: https://github.com/Perl/perl5 Commit: 6f9f5ab3aba606b89f7e248e4101ed422275d7e0 https://github.com/Perl/perl5/commit/6f9f5ab3aba606b89f7e248e4101ed422275d7e0 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-05 (Thu, 05 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: 5ad42220515b9adee695c47c1119bbad37a375e9 https://github.com/Perl/perl5/commit/5ad42220515b9adee695c47c1119bbad37a375e9 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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. 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: ea05232725c26444af32dd5adae4634262c3a0f8 https://github.com/Perl/perl5/commit/ea05232725c26444af32dd5adae4634262c3a0f8 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: a36a317d1c48e26208fb48752cb42c68bab1feeb https://github.com/Perl/perl5/commit/a36a317d1c48e26208fb48752cb42c68bab1feeb Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 59dd4afd915d2a69f7f3c03bdd3b69ebca4235d2 https://github.com/Perl/perl5/commit/59dd4afd915d2a69f7f3c03bdd3b69ebca4235d2 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 Nov 2020) Changed paths: M ext/File-Find/t/find.t Log Message: ----------- File::Find find.t: switch to done_testing() Commit: 6b0cd1298fd73b607bb9f5e34c76af490b767bad https://github.com/Perl/perl5/commit/6b0cd1298fd73b607bb9f5e34c76af490b767bad Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 16a0347bac9820ef29f5651da090dd61a6e75ec1 https://github.com/Perl/perl5/commit/16a0347bac9820ef29f5651da090dd61a6e75ec1 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 Nov 2020) Changed paths: M lib/File/Copy.pm M lib/File/Copy.t Log Message: ----------- File::Copy: support symlinks on Win32 Commit: e8eaac003335c3f02c1c369fae90171b7b797f05 https://github.com/Perl/perl5/commit/e8eaac003335c3f02c1c369fae90171b7b797f05 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 14c4c2529f5b04bf3f430856529b1bd7cf3619db https://github.com/Perl/perl5/commit/14c4c2529f5b04bf3f430856529b1bd7cf3619db Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 Nov 2020) Changed paths: M win32/win32.c Log Message: ----------- win32 symlink: only use the unprivileged flag if windows is new enough Commit: 5da4846386d5962ef3e0bd7fda08837fd6d0e52e https://github.com/Perl/perl5/commit/5da4846386d5962ef3e0bd7fda08837fd6d0e52e Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 6c2049f2dd68f798564213171d50d25670cc7907 https://github.com/Perl/perl5/commit/6c2049f2dd68f798564213171d50d25670cc7907 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: b53b5fac15b0cef2479eca78818a623a591830f8 https://github.com/Perl/perl5/commit/b53b5fac15b0cef2479eca78818a623a591830f8 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 383e5e7bdafce693f64dd7a1492d2ce5cff41431 https://github.com/Perl/perl5/commit/383e5e7bdafce693f64dd7a1492d2ce5cff41431 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 Nov 2020) Changed paths: M win32/win32.c Log Message: ----------- pre-vista support for win32_symlink Commit: d5041d541b2a4fa8398aa667d0ca7e358889b7b2 https://github.com/Perl/perl5/commit/d5041d541b2a4fa8398aa667d0ca7e358889b7b2 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: b6244f79d1fa9673b2dba188b6e6cf39670e4065 https://github.com/Perl/perl5/commit/b6244f79d1fa9673b2dba188b6e6cf39670e4065 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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: 6fbcba6143facfc8c86ee4f86e9dabf90c459db8 https://github.com/Perl/perl5/commit/6fbcba6143facfc8c86ee4f86e9dabf90c459db8 Author: Tony Cook <t...@develop-help.com> Date: 2020-11-09 (Mon, 09 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/849b785af31a...6fbcba6143fa