| Filename | /usr/lib/perl5/5.14/i686-cygwin-threads-64int/File/Spec/Cygwin.pm |
| Statements | Executed 179853 statements in 628ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 19983 | 2 | 1 | 357ms | 962ms | File::Spec::Cygwin::canonpath |
| 9987 | 2 | 2 | 117ms | 718ms | File::Spec::Cygwin::catdir |
| 9996 | 1 | 1 | 64.3ms | 97.4ms | File::Spec::Cygwin::file_name_is_absolute |
| 39966 | 2 | 1 | 36.4ms | 36.4ms | File::Spec::Cygwin::CORE:subst (opcode) |
| 9996 | 1 | 1 | 33.0ms | 33.0ms | File::Spec::Cygwin::CORE:match (opcode) |
| 1 | 1 | 1 | 192µs | 197µs | File::Spec::Cygwin::BEGIN@3 |
| 1 | 1 | 1 | 15µs | 80µs | File::Spec::Cygwin::BEGIN@4 |
| 0 | 0 | 0 | 0s | 0s | File::Spec::Cygwin::case_tolerant |
| 0 | 0 | 0 | 0s | 0s | File::Spec::Cygwin::tmpdir |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package File::Spec::Cygwin; | ||||
| 2 | |||||
| 3 | 2 | 67µs | 2 | 202µs | # spent 197µs (192+5) within File::Spec::Cygwin::BEGIN@3 which was called:
# once (192µs+5µs) by File::Copy::BEGIN@13 at line 3 # spent 197µs making 1 call to File::Spec::Cygwin::BEGIN@3
# spent 6µs making 1 call to strict::import |
| 4 | 2 | 1.11ms | 2 | 145µs | # spent 80µs (15+65) within File::Spec::Cygwin::BEGIN@4 which was called:
# once (15µs+65µs) by File::Copy::BEGIN@13 at line 4 # spent 80µs making 1 call to File::Spec::Cygwin::BEGIN@4
# spent 65µs making 1 call to vars::import |
| 5 | 1 | 3.19ms | require File::Spec::Unix; | ||
| 6 | |||||
| 7 | 1 | 2µs | $VERSION = '3.33'; | ||
| 8 | 1 | 24µs | $VERSION = eval $VERSION; # spent 5µs executing statements in string eval | ||
| 9 | |||||
| 10 | 1 | 15µs | @ISA = qw(File::Spec::Unix); | ||
| 11 | |||||
| 12 | =head1 NAME | ||||
| 13 | |||||
| 14 | File::Spec::Cygwin - methods for Cygwin file specs | ||||
| 15 | |||||
| 16 | =head1 SYNOPSIS | ||||
| 17 | |||||
| 18 | require File::Spec::Cygwin; # Done internally by File::Spec if needed | ||||
| 19 | |||||
| 20 | =head1 DESCRIPTION | ||||
| 21 | |||||
| 22 | See L<File::Spec> and L<File::Spec::Unix>. This package overrides the | ||||
| 23 | implementation of these methods, not the semantics. | ||||
| 24 | |||||
| 25 | This module is still in beta. Cygwin-knowledgeable folks are invited | ||||
| 26 | to offer patches and suggestions. | ||||
| 27 | |||||
| 28 | =cut | ||||
| 29 | |||||
| 30 | =pod | ||||
| 31 | |||||
| 32 | =over 4 | ||||
| 33 | |||||
| 34 | =item canonpath | ||||
| 35 | |||||
| 36 | Any C<\> (backslashes) are converted to C</> (forward slashes), | ||||
| 37 | and then File::Spec::Unix canonpath() is called on the result. | ||||
| 38 | |||||
| 39 | =cut | ||||
| 40 | |||||
| 41 | # spent 962ms (357+605) within File::Spec::Cygwin::canonpath which was called 19983 times, avg 48µs/call:
# 9996 times (174ms+276ms) by File::Spec::Unix::rel2abs at line 460 of File/Spec/Unix.pm, avg 45µs/call
# 9987 times (183ms+328ms) by File::Spec::Unix::catdir at line 86 of File/Spec/Unix.pm, avg 51µs/call | ||||
| 42 | 119898 | 394ms | my($self,$path) = @_; | ||
| 43 | return unless defined $path; | ||||
| 44 | |||||
| 45 | 19983 | 21.7ms | $path =~ s|\\|/|g; # spent 21.7ms making 19983 calls to File::Spec::Cygwin::CORE:subst, avg 1µs/call | ||
| 46 | |||||
| 47 | # Handle network path names beginning with double slash | ||||
| 48 | my $node = ''; | ||||
| 49 | 19983 | 14.8ms | if ( $path =~ s@^(//[^/]+)(?:/|\z)@/@s ) { # spent 14.8ms making 19983 calls to File::Spec::Cygwin::CORE:subst, avg 739ns/call | ||
| 50 | $node = $1; | ||||
| 51 | } | ||||
| 52 | 19983 | 568ms | return $node . $self->SUPER::canonpath($path); # spent 568ms making 19983 calls to File::Spec::Unix::canonpath, avg 28µs/call | ||
| 53 | } | ||||
| 54 | |||||
| 55 | # spent 718ms (117+601) within File::Spec::Cygwin::catdir which was called 9987 times, avg 72µs/call:
# 9982 times (117ms+601ms) by Archive::Zip::_asLocalName at line 549 of Archive/Zip.pm, avg 72µs/call
# 5 times (65µs+339µs) by File::Spec::Unix::rel2abs at line 457 of File/Spec/Unix.pm, avg 81µs/call | ||||
| 56 | 39948 | 117ms | my $self = shift; | ||
| 57 | return unless @_; | ||||
| 58 | |||||
| 59 | # Don't create something that looks like a //network/path | ||||
| 60 | if ($_[0] and ($_[0] eq '/' or $_[0] eq '\\')) { | ||||
| 61 | shift; | ||||
| 62 | return $self->SUPER::catdir('', @_); | ||||
| 63 | } | ||||
| 64 | |||||
| 65 | 9987 | 601ms | $self->SUPER::catdir(@_); # spent 601ms making 9987 calls to File::Spec::Unix::catdir, avg 60µs/call | ||
| 66 | } | ||||
| 67 | |||||
| 68 | =pod | ||||
| 69 | |||||
| 70 | =item file_name_is_absolute | ||||
| 71 | |||||
| 72 | True is returned if the file name begins with C<drive_letter:>, | ||||
| 73 | and if not, File::Spec::Unix file_name_is_absolute() is called. | ||||
| 74 | |||||
| 75 | =cut | ||||
| 76 | |||||
| 77 | |||||
| 78 | # spent 97.4ms (64.3+33.2) within File::Spec::Cygwin::file_name_is_absolute which was called 9996 times, avg 10µs/call:
# 9996 times (64.3ms+33.2ms) by File::Spec::Unix::rel2abs at line 444 of File/Spec/Unix.pm, avg 10µs/call | ||||
| 79 | 19997 | 113ms | my ($self,$file) = @_; | ||
| 80 | 9996 | 33.0ms | return 1 if $file =~ m{^([a-z]:)?[\\/]}is; # C:/test # spent 33.0ms making 9996 calls to File::Spec::Cygwin::CORE:match, avg 3µs/call | ||
| 81 | 5 | 205µs | return $self->SUPER::file_name_is_absolute($file); # spent 205µs making 5 calls to File::Spec::Unix::file_name_is_absolute, avg 41µs/call | ||
| 82 | } | ||||
| 83 | |||||
| 84 | =item tmpdir (override) | ||||
| 85 | |||||
| 86 | Returns a string representation of the first existing directory | ||||
| 87 | from the following list: | ||||
| 88 | |||||
| 89 | $ENV{TMPDIR} | ||||
| 90 | /tmp | ||||
| 91 | $ENV{'TMP'} | ||||
| 92 | $ENV{'TEMP'} | ||||
| 93 | C:/temp | ||||
| 94 | |||||
| 95 | Since Perl 5.8.0, if running under taint mode, and if the environment | ||||
| 96 | variables are tainted, they are not used. | ||||
| 97 | |||||
| 98 | =cut | ||||
| 99 | |||||
| 100 | 1 | 500ns | my $tmpdir; | ||
| 101 | sub tmpdir { | ||||
| 102 | return $tmpdir if defined $tmpdir; | ||||
| 103 | $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp", $ENV{'TMP'}, $ENV{'TEMP'}, 'C:/temp' ); | ||||
| 104 | } | ||||
| 105 | |||||
| 106 | =item case_tolerant | ||||
| 107 | |||||
| 108 | Override Unix. Cygwin case-tolerance depends on managed mount settings and | ||||
| 109 | as with MsWin32 on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE, | ||||
| 110 | indicating the case significance when comparing file specifications. | ||||
| 111 | Default: 1 | ||||
| 112 | |||||
| 113 | =cut | ||||
| 114 | |||||
| 115 | sub case_tolerant { | ||||
| 116 | return 1 unless $^O eq 'cygwin' | ||||
| 117 | and defined &Cygwin::mount_flags; | ||||
| 118 | |||||
| 119 | my $drive = shift; | ||||
| 120 | if (! $drive) { | ||||
| 121 | my @flags = split(/,/, Cygwin::mount_flags('/cygwin')); | ||||
| 122 | my $prefix = pop(@flags); | ||||
| 123 | if (! $prefix || $prefix eq 'cygdrive') { | ||||
| 124 | $drive = '/cygdrive/c'; | ||||
| 125 | } elsif ($prefix eq '/') { | ||||
| 126 | $drive = '/c'; | ||||
| 127 | } else { | ||||
| 128 | $drive = "$prefix/c"; | ||||
| 129 | } | ||||
| 130 | } | ||||
| 131 | my $mntopts = Cygwin::mount_flags($drive); | ||||
| 132 | if ($mntopts and ($mntopts =~ /,managed/)) { | ||||
| 133 | return 0; | ||||
| 134 | } | ||||
| 135 | eval { require Win32API::File; } or return 1; | ||||
| 136 | my $osFsType = "\0"x256; | ||||
| 137 | my $osVolName = "\0"x256; | ||||
| 138 | my $ouFsFlags = 0; | ||||
| 139 | Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 ); | ||||
| 140 | if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; } | ||||
| 141 | else { return 1; } | ||||
| 142 | } | ||||
| 143 | |||||
| 144 | =back | ||||
| 145 | |||||
| 146 | =head1 COPYRIGHT | ||||
| 147 | |||||
| 148 | Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved. | ||||
| 149 | |||||
| 150 | This program is free software; you can redistribute it and/or modify | ||||
| 151 | it under the same terms as Perl itself. | ||||
| 152 | |||||
| 153 | =cut | ||||
| 154 | |||||
| 155 | 1 | 18µs | 1; | ||
# spent 33.0ms within File::Spec::Cygwin::CORE:match which was called 9996 times, avg 3µs/call:
# 9996 times (33.0ms+0s) by File::Spec::Cygwin::file_name_is_absolute at line 80, avg 3µs/call | |||||
sub File::Spec::Cygwin::CORE:subst; # opcode |