Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mknmz: symlinked target directory



さとうふみやすです。

mknmz の処理対象に、パスにシンボリックリンクが含まれるディレクトリを
指定した場合、インデックス対象を検索する処理において

    chdir $target;
    $target = cwd();

とされていて、指定した名前が変換(?)されてしまいます。
# 実際のコードはこれとは違います。念のため。

--replace=CODE を指定するときなどやっかいなので、これを
防ぐパッチ。

--- mknmz.in.dist	Thu Oct  5 13:58:19 2000
+++ mknmz.in	Wed Nov 15 19:50:10 2000
@@ -36,6 +36,7 @@
 use strict;  # be strict since v1.2.0
 use Getopt::Long;
 use File::Copy;
+use DirHandle;
 
 use vars qw($SYSTEM $LANG);
 $SYSTEM = $^O;
@@ -1266,8 +1267,23 @@
 	if (-f $target) { # target is a file.
 	    add_target($target, \@flist, \%counts);
 	} elsif (-d $target) { # target is a directory.
-	    my $cwd = cwd();
-	    chdir $target;
+	    my @subtargets = ();
+
+	    # Find subdirectories in target directory
+	    # because File::Find::find() does not follow symlink.
+	    if (-l $target) {
+		my $dh = new DirHandle($target);
+		while (defined(my $ent = $dh->read)) {
+		    my $fname = "$target/$ent";
+		    if (-d $fname) {
+			push(@subtargets, $fname);
+		    } else {
+			add_target($fname, \@flist, \%counts);
+		    }
+		}
+	    } else {
+		@subtargets = ($target);
+	    }
 
 	    #
 	    # Wanted routine for File::Find's find().
@@ -1277,8 +1293,7 @@
 		add_target($fname, \@flist, \%counts);
 	    };
 
-	    find($wanted_closure, cwd());
-	    chdir $cwd;
+	    find($wanted_closure, @subtargets);
 	} else {
 	    print STDERR _("unsupported target: ") . $target;
 	}

-- 
SATOH Fumiyasu <fumiya@xxxxxxxxxxx> <fsatoh@xxxxxxxxx>
Samba-JP, aka `Samba Users Group Japan' - http://www.samba.gr.jp/
Digital Design Co., Ltd. Tokyo Office   - http://www.d-d.co.jp/