16fb12b70Safresh1package File::Spec::Cygwin; 26fb12b70Safresh1 36fb12b70Safresh1use strict; 46fb12b70Safresh1require File::Spec::Unix; 56fb12b70Safresh1 6*3d61058aSafresh1our $VERSION = '3.91'; 7b8851fccSafresh1$VERSION =~ tr/_//d; 86fb12b70Safresh1 99f11ffb7Safresh1our @ISA = qw(File::Spec::Unix); 106fb12b70Safresh1 116fb12b70Safresh1=head1 NAME 126fb12b70Safresh1 136fb12b70Safresh1File::Spec::Cygwin - methods for Cygwin file specs 146fb12b70Safresh1 156fb12b70Safresh1=head1 SYNOPSIS 166fb12b70Safresh1 176fb12b70Safresh1 require File::Spec::Cygwin; # Done internally by File::Spec if needed 186fb12b70Safresh1 196fb12b70Safresh1=head1 DESCRIPTION 206fb12b70Safresh1 216fb12b70Safresh1See L<File::Spec> and L<File::Spec::Unix>. This package overrides the 226fb12b70Safresh1implementation of these methods, not the semantics. 236fb12b70Safresh1 246fb12b70Safresh1This module is still in beta. Cygwin-knowledgeable folks are invited 256fb12b70Safresh1to offer patches and suggestions. 266fb12b70Safresh1 276fb12b70Safresh1=cut 286fb12b70Safresh1 296fb12b70Safresh1=pod 306fb12b70Safresh1 316fb12b70Safresh1=over 4 326fb12b70Safresh1 336fb12b70Safresh1=item canonpath 346fb12b70Safresh1 356fb12b70Safresh1Any C<\> (backslashes) are converted to C</> (forward slashes), 366fb12b70Safresh1and then File::Spec::Unix canonpath() is called on the result. 376fb12b70Safresh1 386fb12b70Safresh1=cut 396fb12b70Safresh1 406fb12b70Safresh1sub canonpath { 416fb12b70Safresh1 my($self,$path) = @_; 426fb12b70Safresh1 return unless defined $path; 436fb12b70Safresh1 446fb12b70Safresh1 $path =~ s|\\|/|g; 456fb12b70Safresh1 466fb12b70Safresh1 # Handle network path names beginning with double slash 476fb12b70Safresh1 my $node = ''; 486fb12b70Safresh1 if ( $path =~ s@^(//[^/]+)(?:/|\z)@/@s ) { 496fb12b70Safresh1 $node = $1; 506fb12b70Safresh1 } 516fb12b70Safresh1 return $node . $self->SUPER::canonpath($path); 526fb12b70Safresh1} 536fb12b70Safresh1 546fb12b70Safresh1sub catdir { 556fb12b70Safresh1 my $self = shift; 566fb12b70Safresh1 return unless @_; 576fb12b70Safresh1 586fb12b70Safresh1 # Don't create something that looks like a //network/path 596fb12b70Safresh1 if ($_[0] and ($_[0] eq '/' or $_[0] eq '\\')) { 606fb12b70Safresh1 shift; 616fb12b70Safresh1 return $self->SUPER::catdir('', @_); 626fb12b70Safresh1 } 636fb12b70Safresh1 646fb12b70Safresh1 $self->SUPER::catdir(@_); 656fb12b70Safresh1} 666fb12b70Safresh1 676fb12b70Safresh1=pod 686fb12b70Safresh1 696fb12b70Safresh1=item file_name_is_absolute 706fb12b70Safresh1 716fb12b70Safresh1True is returned if the file name begins with C<drive_letter:>, 726fb12b70Safresh1and if not, File::Spec::Unix file_name_is_absolute() is called. 736fb12b70Safresh1 746fb12b70Safresh1=cut 756fb12b70Safresh1 766fb12b70Safresh1 776fb12b70Safresh1sub file_name_is_absolute { 786fb12b70Safresh1 my ($self,$file) = @_; 796fb12b70Safresh1 return 1 if $file =~ m{^([a-z]:)?[\\/]}is; # C:/test 806fb12b70Safresh1 return $self->SUPER::file_name_is_absolute($file); 816fb12b70Safresh1} 826fb12b70Safresh1 836fb12b70Safresh1=item tmpdir (override) 846fb12b70Safresh1 856fb12b70Safresh1Returns a string representation of the first existing directory 866fb12b70Safresh1from the following list: 876fb12b70Safresh1 886fb12b70Safresh1 $ENV{TMPDIR} 896fb12b70Safresh1 /tmp 906fb12b70Safresh1 $ENV{'TMP'} 916fb12b70Safresh1 $ENV{'TEMP'} 926fb12b70Safresh1 C:/temp 936fb12b70Safresh1 946fb12b70Safresh1If running under taint mode, and if the environment 956fb12b70Safresh1variables are tainted, they are not used. 966fb12b70Safresh1 976fb12b70Safresh1=cut 986fb12b70Safresh1 996fb12b70Safresh1sub tmpdir { 1006fb12b70Safresh1 my $cached = $_[0]->_cached_tmpdir(qw 'TMPDIR TMP TEMP'); 1016fb12b70Safresh1 return $cached if defined $cached; 1026fb12b70Safresh1 $_[0]->_cache_tmpdir( 1036fb12b70Safresh1 $_[0]->_tmpdir( 1046fb12b70Safresh1 $ENV{TMPDIR}, "/tmp", $ENV{'TMP'}, $ENV{'TEMP'}, 'C:/temp' 1056fb12b70Safresh1 ), 1066fb12b70Safresh1 qw 'TMPDIR TMP TEMP' 1076fb12b70Safresh1 ); 1086fb12b70Safresh1} 1096fb12b70Safresh1 1106fb12b70Safresh1=item case_tolerant 1116fb12b70Safresh1 1126fb12b70Safresh1Override Unix. Cygwin case-tolerance depends on managed mount settings and 1136fb12b70Safresh1as with MsWin32 on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE, 1146fb12b70Safresh1indicating the case significance when comparing file specifications. 1156fb12b70Safresh1Default: 1 1166fb12b70Safresh1 1176fb12b70Safresh1=cut 1186fb12b70Safresh1 1196fb12b70Safresh1sub case_tolerant { 1206fb12b70Safresh1 return 1 unless $^O eq 'cygwin' 1216fb12b70Safresh1 and defined &Cygwin::mount_flags; 1226fb12b70Safresh1 1236fb12b70Safresh1 my $drive = shift; 1246fb12b70Safresh1 if (! $drive) { 1256fb12b70Safresh1 my @flags = split(/,/, Cygwin::mount_flags('/cygwin')); 1266fb12b70Safresh1 my $prefix = pop(@flags); 1276fb12b70Safresh1 if (! $prefix || $prefix eq 'cygdrive') { 1286fb12b70Safresh1 $drive = '/cygdrive/c'; 1296fb12b70Safresh1 } elsif ($prefix eq '/') { 1306fb12b70Safresh1 $drive = '/c'; 1316fb12b70Safresh1 } else { 1326fb12b70Safresh1 $drive = "$prefix/c"; 1336fb12b70Safresh1 } 1346fb12b70Safresh1 } 1356fb12b70Safresh1 my $mntopts = Cygwin::mount_flags($drive); 1366fb12b70Safresh1 if ($mntopts and ($mntopts =~ /,managed/)) { 1376fb12b70Safresh1 return 0; 1386fb12b70Safresh1 } 1390b7734b3Safresh1 eval { 1400b7734b3Safresh1 local @INC = @INC; 1410b7734b3Safresh1 pop @INC if $INC[-1] eq '.'; 1420b7734b3Safresh1 require Win32API::File; 1430b7734b3Safresh1 } or return 1; 1446fb12b70Safresh1 my $osFsType = "\0"x256; 1456fb12b70Safresh1 my $osVolName = "\0"x256; 1466fb12b70Safresh1 my $ouFsFlags = 0; 1476fb12b70Safresh1 Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 ); 1486fb12b70Safresh1 if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; } 1496fb12b70Safresh1 else { return 1; } 1506fb12b70Safresh1} 1516fb12b70Safresh1 1526fb12b70Safresh1=back 1536fb12b70Safresh1 1546fb12b70Safresh1=head1 COPYRIGHT 1556fb12b70Safresh1 1566fb12b70Safresh1Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved. 1576fb12b70Safresh1 1586fb12b70Safresh1This program is free software; you can redistribute it and/or modify 1596fb12b70Safresh1it under the same terms as Perl itself. 1606fb12b70Safresh1 1616fb12b70Safresh1=cut 1626fb12b70Safresh1 1636fb12b70Safresh11; 164