MSYS2-packages/perl/0005-perl.cygwin-Win32.patch
Christoph Reiter ebc5596228 perl: Update to 5.36.0
This is mainly a sync of perl from "Git for Windows"
2022-10-26 09:59:55 +02:00

124 lines
3.5 KiB
Diff

From 95d30af67bcbe14a0755e24c85400affc01eac20 Mon Sep 17 00:00:00 2001
From: Alexey Pavlov <alexpux@gmail.com>
Date: Thu, 28 Jun 2018 11:41:32 +0300
Subject: [PATCH 5/7] perl.cygwin-Win32
---
cpan/Win32/t/GetShortPathName.t | 9 ++++++---
cpan/Win32/t/Unicode.t | 31 ++++++++++++++++---------------
2 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/cpan/Win32/t/GetShortPathName.t b/cpan/Win32/t/GetShortPathName.t
index 649420a..82ce2d5 100644
--- a/cpan/Win32/t/GetShortPathName.t
+++ b/cpan/Win32/t/GetShortPathName.t
@@ -12,18 +12,21 @@ BEGIN {
}
}
-my $path = "Long Path $$";
+my $path = "C:\\Long Path $$";
unlink($path);
END { unlink $path }
-plan tests => 5;
+plan tests => 7;
Win32::CreateFile($path);
ok(-f $path);
my $short = Win32::GetShortPathName($path);
-ok($short, qr/^\S{1,8}(\.\S{1,3})?$/);
+ok($short, qr/^C:\\\S{1,8}(\.\S{1,3})?$/);
ok(-f $short);
+my $long = Win32::GetLongPathName($short);
+ok($long, $path);
+ok(-f $long);
unlink($path);
ok(!-f $path);
diff --git a/cpan/Win32/t/Unicode.t b/cpan/Win32/t/Unicode.t
index c1380e8..fa05188 100644
--- a/cpan/Win32/t/Unicode.t
+++ b/cpan/Win32/t/Unicode.t
@@ -1,8 +1,9 @@
use strict;
-use Test;
+use utf8;
+use Test::More;
use Config qw(%Config);
use Cwd qw(cwd);
-use Encode qw();
+use Encode qw(encode decode);
use Win32;
BEGIN {
@@ -27,10 +28,13 @@ BEGIN {
}
}
-my $home = Win32::GetCwd();
-my $cwd = cwd(); # may be a Cygwin path
-my $dir = "Foo \x{394}\x{419} Bar \x{5E7}\x{645} Baz";
-my $file = "$dir\\xyzzy \x{394}\x{419} plugh \x{5E7}\x{645}";
+my $home = Win32::GetCwd();
+my $cwd = cwd(); # may be a Cygwin path
+my $dir8 = "Foo ΔЙ Bar קم Baz"; #Foo \x{394}\x{419} Bar \x{5E7}\x{645} Baz";
+my $file8 = "$dir8\\xyzzy ΔЙ plugh קم"; #xyzzy \x{394}\x{419} plugh \x{5E7}\x{645}";
+my $dir = encode("UTF-8", $dir8);
+my $file = encode("UTF-8", $file8);
+
sub cleanup {
chdir($home);
@@ -43,32 +47,29 @@ sub cleanup {
cleanup();
END { cleanup() }
-plan test => 12;
+plan tests => 12;
# Create Unicode directory
-Win32::CreateDirectory($dir);
+Win32::CreateDirectory($dir8);
ok(-d Win32::GetANSIPathName($dir));
# Create Unicode file
-Win32::CreateFile($file);
+Win32::CreateFile($file8);
ok(-f Win32::GetANSIPathName($file));
# readdir() returns ANSI form of Unicode filename
ok(opendir(my $dh, Win32::GetANSIPathName($dir)));
while ($_ = readdir($dh)) {
next if /^\./;
- # On Cygwin 1.7 readdir() returns the utf8 representation of the
- # filename but doesn't turn on the SvUTF8 bit
- Encode::_utf8_on($_) if $^O eq "cygwin" && $Config{osvers} !~ /^1.5/;
ok($file, Win32::GetLongPathName("$dir\\$_"));
}
closedir($dh);
# Win32::GetLongPathName() of the absolute path restores the Unicode dir name
-my $full = Win32::GetFullPathName($dir);
+my $full = Win32::GetFullPathName($dir8);
my $long = Win32::GetLongPathName($full);
-ok($long, Win32::GetLongPathName($home)."\\$dir");
+ok($long, Win32::GetLongPathName($home)."\\".$dir);
# We can Win32::SetCwd() into the Unicode directory
ok(Win32::SetCwd($dir));
@@ -87,7 +88,7 @@ ok(Win32::GetLongPathName($w32dir), $long);
# cwd() on Cygwin returns a mapped path that we need to translate
# back to a Windows path. Invoking `cygpath` on $subdir doesn't work.
if ($^O eq "cygwin") {
- $subdir = Cygwin::posix_to_win_path($subdir, 1);
+ $subdir = decode "UTF-8", Cygwin::posix_to_win_path($subdir, 1);
}
$subdir =~ s,/,\\,g;
# Cygwin64 no longer returns an ANSI name
--
2.37.1