1 |
#!perl5 |
2 |
# |
3 |
# ***** BEGIN LICENSE BLOCK ***** |
4 |
# Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
5 |
# |
6 |
# The contents of this file are subject to the Mozilla Public License Version |
7 |
# 1.1 (the "License"); you may not use this file except in compliance with |
8 |
# the License. You may obtain a copy of the License at |
9 |
# http://www.mozilla.org/MPL/ |
10 |
# |
11 |
# Software distributed under the License is distributed on an "AS IS" basis, |
12 |
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
13 |
# for the specific language governing rights and limitations under the |
14 |
# License. |
15 |
# |
16 |
# The Original Code is mozilla.org code. |
17 |
# |
18 |
# The Initial Developer of the Original Code is |
19 |
# Netscape Communications Corporation. |
20 |
# Portions created by the Initial Developer are Copyright (C) 1998 |
21 |
# the Initial Developer. All Rights Reserved. |
22 |
# |
23 |
# Contributor(s): |
24 |
# |
25 |
# Alternatively, the contents of this file may be used under the terms of |
26 |
# either of the GNU General Public License Version 2 or later (the "GPL"), |
27 |
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
28 |
# in which case the provisions of the GPL or the LGPL are applicable instead |
29 |
# of those above. If you wish to allow use of your version of this file only |
30 |
# under the terms of either the GPL or the LGPL, and not to allow others to |
31 |
# use your version of this file under the terms of the MPL, indicate your |
32 |
# decision by deleting the provisions above and replace them with the notice |
33 |
# and other provisions required by the GPL or the LGPL. If you do not delete |
34 |
# the provisions above, a recipient may use your version of this file under |
35 |
# the terms of any one of the MPL, the GPL or the LGPL. |
36 |
# |
37 |
# ***** END LICENSE BLOCK ***** |
38 |
|
39 |
sub fastcwd { |
40 |
local($odev, $oino, $cdev, $cino, $tdev, $tino); |
41 |
local(@path, $path); |
42 |
local(*DIR); |
43 |
|
44 |
($cdev, $cino) = stat('.'); |
45 |
for (;;) { |
46 |
($odev, $oino) = ($cdev, $cino); |
47 |
chdir('..'); |
48 |
($cdev, $cino) = stat('.'); |
49 |
last if $odev == $cdev && $oino == $cino; |
50 |
opendir(DIR, '.'); |
51 |
for (;;) { |
52 |
$_ = readdir(DIR); |
53 |
next if $_ eq '.'; |
54 |
next if $_ eq '..'; |
55 |
|
56 |
last unless $_; |
57 |
($tdev, $tino) = lstat($_); |
58 |
last unless $tdev != $odev || $tino != $oino; |
59 |
} |
60 |
closedir(DIR); |
61 |
unshift(@path, $_); |
62 |
} |
63 |
chdir($path = '/' . join('/', @path)); |
64 |
$path; |
65 |
} |
66 |
1; |