44 lines
1.0 KiB
Perl
44 lines
1.0 KiB
Perl
|
# By John Bazik
|
||
|
#
|
||
|
# This library is no longer being maintained, and is included for backward
|
||
|
# compatibility with Perl 4 programs which may require it.
|
||
|
#
|
||
|
# In particular, this should not be used as an example of modern Perl
|
||
|
# programming techniques.
|
||
|
#
|
||
|
# Suggested alternative: Cwd
|
||
|
#
|
||
|
# Usage: $cwd = &fastcwd;
|
||
|
#
|
||
|
# This is a faster version of getcwd. It's also more dangerous because
|
||
|
# you might chdir out of a directory that you can't chdir back into.
|
||
|
|
||
|
sub fastcwd {
|
||
|
local($odev, $oino, $cdev, $cino, $tdev, $tino);
|
||
|
local(@path, $path);
|
||
|
local(*DIR);
|
||
|
|
||
|
($cdev, $cino) = stat('.');
|
||
|
for (;;) {
|
||
|
($odev, $oino) = ($cdev, $cino);
|
||
|
chdir('..');
|
||
|
($cdev, $cino) = stat('.');
|
||
|
last if $odev == $cdev && $oino == $cino;
|
||
|
opendir(DIR, '.');
|
||
|
for (;;) {
|
||
|
$_ = readdir(DIR);
|
||
|
next if $_ eq '.';
|
||
|
next if $_ eq '..';
|
||
|
|
||
|
last unless $_;
|
||
|
($tdev, $tino) = lstat($_);
|
||
|
last unless $tdev != $odev || $tino != $oino;
|
||
|
}
|
||
|
closedir(DIR);
|
||
|
unshift(@path, $_);
|
||
|
}
|
||
|
chdir($path = '/' . join('/', @path));
|
||
|
$path;
|
||
|
}
|
||
|
1;
|