From 6c63633545c254dc085402e0f927a6826d1dd229 Mon Sep 17 00:00:00 2001 From: Akinori Ito Date: Fri, 9 Nov 2001 04:59:17 +0000 Subject: Updates from 0.2.1 into 0.2.1-inu-1.5 --- scripts/dirlist.cgi | 107 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 38 deletions(-) (limited to 'scripts/dirlist.cgi') diff --git a/scripts/dirlist.cgi b/scripts/dirlist.cgi index 40f11a8..618d4e5 100644 --- a/scripts/dirlist.cgi +++ b/scripts/dirlist.cgi @@ -3,13 +3,27 @@ # Directory list CGI by Hironori Sakamoto (hsaka@mth.biglobe.ne.jp) # -$CYGWIN = 0; +if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) { + $WIN32 = 1; + $CYGPATH = 1; +} +elsif ( $^O =~ /cygwin|os2/i ) { + $WIN32 = 1; + $CYGPATH = 0; +} +else { + $WIN32 = 0; + $CYGPATH = 0; +} $RC_DIR = '~/.w3m/'; $RC_DIR =~ s@^~/@$ENV{'HOME'}/@; +if ($CYGPATH) { + $RC_DIR = &cygwin_pathconv("$RC_DIR"); +} $CONFIG = "$RC_DIR/dirlist"; $CGI = $ENV{'SCRIPT_NAME'} || $0; -$CGI = &html_quote(&form_encode("file:$CGI")); +$CGI = "file://" . &file_encode("$CGI"); $AFMT = '%s'; $NOW = time(); @@ -39,7 +53,7 @@ if ($query eq '') { } else { $dir = $query; if (($dir !~ m@^/@) && - ($CYGWIN && $dir !~ /^[a-z]:/i)) { + ($WIN32 && $dir !~ /^[a-z]:/i)) { $_ = `pwd`; chop; s/\r$//; @@ -50,11 +64,17 @@ if ($query eq '') { if ($dir !~ m@/$@) { $dir .= '/'; } +if ($dir =~ m@^/@ && $CYGPATH) { + $dir = &cygwin_pathconv("$dir"); +} $ROOT = ''; -if ($CYGWIN) { +if ($WIN32) { if (($dir =~ s@^//[^/]+@@) || ($dir =~ s@^[a-z]:@@i)) { $ROOT = $&; } + if ($CYGPATH) { + $ROOT = &cygwin_pathconv("$ROOT"); + } } if ($cgi) { $dir = &cleanup($dir); @@ -67,8 +87,8 @@ if ($cmd) { &update_option($CONFIG); } -$qdir = &html_quote("$ROOT$dir"); -$edir = &html_quote(&form_encode("$ROOT$dir")); +$qdir = "$ROOT" . &html_quote("$dir"); +$edir = "$ROOT" . &file_encode("$dir"); if (! opendir(DIR, "$ROOT$dir")) { print <

Directory list of $qdir

EOF -&print_form($qdir, @OPT); +&print_form($edir, @OPT); print < EOF @@ -114,14 +134,14 @@ if ($TYPE eq $TYPE_TREE) {
 EOF
-  $q = &html_quote("$ROOT$_");
-  $e = &html_quote(&form_encode("$ROOT$_"));
+  $q = "$ROOT". &html_quote("$_");
+  $e = "$ROOT" . &file_encode("$_");
   if ($dir =~ m@^$@) {
     $n = "\" name=\"current";
   } else {
     $n = '';
   }
-  printf("$AFMT\n", "$q$n", "$q");
+  printf("$AFMT\n", "$e$n", "$q");
   $N = 0;
   $SKIPLINE = "";
 
@@ -163,23 +183,23 @@ sub left_dir {
   local($_, $dir0, $d, $qdir, $q, $edir, $e);
 
   $dir0 = "$dir/";
-  $dir = "$ROOT$dir0";
-  opendir(DIR, $dir) || return;
+  $dir = "$dir0";
+  opendir(DIR, "$ROOT$dir") || return;
 
   foreach(sort readdir(DIR)) {
-    -d "$dir$_" || next;
+    -d "$ROOT$dir$_" || next;
     /^\.$/ && next;
     /^\.\.$/ && next;
     push(@cdirs, $_);
   }
   closedir(DIR);
 
-  $qdir = &html_quote($dir);
-  $edir = &html_quote(&form_encode($dir));
+  $qdir = "$ROOT" . &html_quote($dir);
+  $edir = "$ROOT" . &file_encode($dir);
   while(@cdirs) {
     $_ = shift @cdirs;
     $q = &html_quote($_);
-    $e = &html_quote(&form_encode($_));
+    $e = &file_encode($_);
     $N++;
     if (!$ok && $_ eq $sdirs[0]) {
       $d = $dir0 . shift @sdirs;
@@ -189,11 +209,11 @@ sub left_dir {
       } else {
         $n = '';
       }
-      printf("${pre}o-$AFMT\n", "$qdir$q$n", "$q");
+      printf("${pre}o-$AFMT\n", "$edir$e$n", "$q");
       &left_dir(@cdirs ? "$pre| " : "$pre  ", $d, @sdirs);
       $ok = 1;
     } else {
-      printf("${pre}+-$AFMT\n", "$qdir$q", $q);
+      printf("${pre}+-$AFMT\n", "$edir$e", $q);
     }
   }
 }
@@ -206,11 +226,11 @@ sub right_dir {
         $atime,$mtime,$ctime,$blksize,$blocks);
   local(%sizes, %ctimes, %prints);
 
-  $dir = "$ROOT$dir/";
-  opendir(DIR, $dir) || return;
+  $dir = "$dir/";
+  opendir(DIR, "$ROOT$dir") || return;
 
-  $qdir = &html_quote($dir);
-  $edir = &html_quote(&form_encode($dir));
+  $qdir = "$ROOT" . &html_quote($dir);
+  $edir = "$ROOT" . &file_encode($dir);
   if ($TYPE eq $TYPE_TREE) {
     print "$qdir\n";
   }
@@ -221,7 +241,7 @@ sub right_dir {
 #    if ($TYPE eq $TYPE_TREE) {
 #      /^\.\.$/ && next;
 #    }
-    $f = "$dir$_";
+    $f = "$ROOT$dir$_";
     (($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
       $atime,$mtime,$ctime,$blksize,$blocks) = lstat($f)) || next;
     push(@list, $_);
@@ -272,16 +292,16 @@ sub right_dir {
     $n = 0;
     print "\n";
     foreach(@list) {
-      $f = "$dir$_";
+      $f = "$ROOT$dir$_";
       $q = &html_quote($_);
-      $e = &html_quote(&form_encode($_));
+      $e = &file_encode($_);
       if ($n % $nr == 0) {
         print "
"; } if (-d $f) { - printf($AFMT, "$qdir$q", "$q/"); + printf($AFMT, "$edir$e", "$q/"); } else { - printf($AFMT, "$qdir$q", $q); + printf($AFMT, "$edir$e", $q); } $n++; if ($n % $nr == 0) { @@ -294,14 +314,14 @@ sub right_dir { return; } foreach(@list) { - $f = "$dir$_"; + $f = "$ROOT$dir$_"; $q = &html_quote($_); - $e = &html_quote(&form_encode($_)); + $e = &file_encode($_); print $prints{$_}; if (-d $f) { - printf($AFMT, "$qdir$q", "$q/"); + printf($AFMT, "$edir$e", "$q/"); } else { - printf($AFMT, "$qdir$q", $q); + printf($AFMT, "$edir$e", $q); } if (-l $f) { print " -> ", &html_quote(readlink($f)); @@ -316,15 +336,15 @@ sub init_option { $OPT_FORMAT = 1; $OPT_SORT = 2; $TYPE_TREE = 't'; - $TYPE_STARDRD = 'd'; + $TYPE_STANDARD = 'd'; $FORMAT_SHORT = 's'; - $FORMAT_STANDRAD = 'd'; + $FORMAT_STANDARD = 'd'; $FORMAT_LONG = 'l'; $FORMAT_COLUMN = 'c'; $SORT_NAME = 'n'; $SORT_SIZE = 's'; $SORT_TIME = 't'; - local(@opt) = ($TYPE_TREE, $FORMAT_STANDRAD, $SORT_NAME); + local(@opt) = ($TYPE_TREE, $FORMAT_STANDARD, $SORT_NAME); local($_); open(CONFIG, "< $config") || return @opt; @@ -416,17 +436,16 @@ sub html_quote { s/[<>&"]/$QUOTE{$&}/g; return $_; } -sub form_encode { +sub file_encode { local($_) = @_; - s/[\t\r\n%#&=+]/sprintf('%%%2x', unpack('c', $&))/eg; - s/ /+/g; + s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg; return $_; } sub form_decode { local($_) = @_; s/\+/ /g; - s/%([\da-f][\da-f])/pack('c', hex($1))/egi; + s/%([\da-f][\da-f])/pack('C', hex($1))/egi; return $_; } @@ -499,3 +518,15 @@ sub utime { } } +sub cygwin_pathconv { + local($_) = @_; + local(*CYGPATH); + + open(CYGPATH, '-|') or exec('cygpath', '-w', $_); + $_ = ; + close(CYGPATH); + s/\r?\n$//; + s!\\!/!g; + s!/$!!; + return $_; +} -- cgit v1.2.3