[LON-CAPA-cvs] cvs: loncom /cgi decompress.pl

albertel lon-capa-cvs@mail.lon-capa.org
Thu, 03 Nov 2005 20:36:58 -0000


albertel		Thu Nov  3 15:36:58 2005 EDT

  Modified files:              
    /loncom/cgi	decompress.pl 
  Log:
  - shorter and safer
  - BUG#4439, filneams with spaces weren't working
  
  
Index: loncom/cgi/decompress.pl
diff -u loncom/cgi/decompress.pl:1.14 loncom/cgi/decompress.pl:1.15
--- loncom/cgi/decompress.pl:1.14	Wed May 25 18:31:51 2005
+++ loncom/cgi/decompress.pl	Thu Nov  3 15:36:58 2005
@@ -43,60 +43,44 @@
     my $file=$Apache::lonnet::env{'cgi.file'};
     my $dir=$Apache::lonnet::env{'cgi.dir'}; 
     if(! $file || ! $dir) {
-        print <<END;
+        print(<<END);
         <html><body>Bad Enviroment!</body></html>
 END
     } else {
-        print <<END;
-	<html><body><b>Output of decompress:</b><br /><br />
+        print(<<END);
+	<html><body><p><b>Output of decompress:</b></p>
 END
-        chdir $dir;
-        if ($file =~ m|zip|) {
-            open(OUTPUT, "unzip $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|tar.gz|) {
-            open(OUTPUT, "tar -zxpvf $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|tar.bz2|) {
-            open(OUTPUT, "tar -jxpvf $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|bz2|) {
-            open(OUTPUT, "bunzip2 $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|tgz|) {
-            open(OUTPUT, "tar -zxpvf $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|gz|) {
-            open(OUTPUT, "gunzip $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
-        } elsif ($file =~ m|tar|) {
-            open(OUTPUT, "tar -xpvf $file 2> /dev/null |");
-            while (<OUTPUT>) {
-                print "$_<br />";
-            }
-            close(OUTPUT);
+        chdir($dir);
+	my @cmd;
+        if ($file =~ m|\.zip$|) {
+            @cmd = ("/usr/bin/unzip","-o");
+        } elsif ($file =~ m|\.tar\.gz$|) {
+            @cmd = ("/usr/bin/tar","-zxpvf");
+        } elsif ($file =~ m|\.tar\.bz2$|) {
+            @cmd = ("/usr/bin/tar","-jxpvf");
+        } elsif ($file =~ m|\.bz2$|) {
+            @cmd = ("/usr/bin/bunzip2");
+        } elsif ($file =~ m|\.tgz$|) {
+            @cmd = ("/usr/bin/tar","-zxpvf");
+        } elsif ($file =~ m|\.gz$|) {
+	    @cmd = ("/usr/bin/gunzip");
+        } elsif ($file =~ m|\.tar$|) {
+            @cmd = ("/usr/bin/tar","-xpvf");
         } else {
-            print "There has been an error in determining the file type of $file, please check name";
+            print("There has been an error in determining the file type of $file, please check name");
         }
-        print "<br /><b>Decompress complete!</b><br /></body></html>";
+	if (@cmd) {
+	    undef($!);
+	    undef($@);
+	    open(OUTPUT,"-|", @cmd, $file);
+	    while (<OUTPUT>) { print "$_<br />"; }
+	    close(OUTPUT);
+	    print("<p><b>Decompress complete.</b></p>");
+	    if ($! || $@) {
+		print("<p><b>An error occurred</b></p><p>$!</p><p>$@</p>");
+	    }
+	    print("</body></html>");
+	}
     }
 }