--- loncom/cgi/decompress.pl	2004/06/09 19:04:47	1.12
+++ loncom/cgi/decompress.pl	2005/11/03 20:36:58	1.15
@@ -31,8 +31,8 @@
 ####
 use strict;
 use lib '/home/httpd/lib/perl';
-use LONCAPA::loncgi ();
-my %origENV=%ENV;
+use LONCAPA::loncgi;
+
 if(! &LONCAPA::loncgi::check_cookie_and_load_env()) {
     print "Content-type: text/html\n\n";
     print <<END;
@@ -40,64 +40,47 @@ if(! &LONCAPA::loncgi::check_cookie_and_
 END
 } else {
     print "Content-type: text/html\n\n";
-    my $file=$ENV{'cgi.file'};
-    my $dir=$ENV{'cgi.dir'}; 
-    %ENV=%origENV;
+    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>");
+	}
     }
 }