source: for-distributions/trunk/bin/windows/perl/lib/fastcwd.pl@ 14489

Last change on this file since 14489 was 14489, checked in by oranfry, 17 years ago

upgrading to perl 5.8

File size: 1019 bytes
Line 
1# By John Bazik
2#
3# This library is no longer being maintained, and is included for backward
4# compatibility with Perl 4 programs which may require it.
5#
6# In particular, this should not be used as an example of modern Perl
7# programming techniques.
8#
9# Suggested alternative: Cwd
10#
11# Usage: $cwd = &fastcwd;
12#
13# This is a faster version of getcwd. It's also more dangerous because
14# you might chdir out of a directory that you can't chdir back into.
15
16sub fastcwd {
17 local($odev, $oino, $cdev, $cino, $tdev, $tino);
18 local(@path, $path);
19 local(*DIR);
20
21 ($cdev, $cino) = stat('.');
22 for (;;) {
23 ($odev, $oino) = ($cdev, $cino);
24 chdir('..');
25 ($cdev, $cino) = stat('.');
26 last if $odev == $cdev && $oino == $cino;
27 opendir(DIR, '.');
28 for (;;) {
29 $_ = readdir(DIR);
30 next if $_ eq '.';
31 next if $_ eq '..';
32
33 last unless $_;
34 ($tdev, $tino) = lstat($_);
35 last unless $tdev != $odev || $tino != $oino;
36 }
37 closedir(DIR);
38 unshift(@path, $_);
39 }
40 chdir($path = '/' . join('/', @path));
41 $path;
42}
431;
Note: See TracBrowser for help on using the repository browser.