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 | canonpath | File::Spec::Cygwin::
9987 | 2 | 2 | 117ms | 718ms | catdir | File::Spec::Cygwin::
9996 | 1 | 1 | 64.3ms | 97.4ms | file_name_is_absolute | File::Spec::Cygwin::
39966 | 2 | 1 | 36.4ms | 36.4ms | CORE:subst (opcode) | File::Spec::Cygwin::
9996 | 1 | 1 | 33.0ms | 33.0ms | CORE:match (opcode) | File::Spec::Cygwin::
1 | 1 | 1 | 192µs | 197µs | BEGIN@3 | File::Spec::Cygwin::
1 | 1 | 1 | 15µs | 80µs | BEGIN@4 | File::Spec::Cygwin::
0 | 0 | 0 | 0s | 0s | case_tolerant | File::Spec::Cygwin::
0 | 0 | 0 | 0s | 0s | tmpdir | File::Spec::Cygwin::
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 |