--- loncom/cgi/decompress.pl 2005/05/25 22:31:51 1.14 +++ loncom/cgi/decompress.pl 2005/11/03 20:36:58 1.15 @@ -43,60 +43,44 @@ END my $file=$Apache::lonnet::env{'cgi.file'}; my $dir=$Apache::lonnet::env{'cgi.dir'}; if(! $file || ! $dir) { - print <Bad Enviroment! END } else { - print <Output of decompress:

+ print(<

Output of decompress:

END - chdir $dir; - if ($file =~ m|zip|) { - open(OUTPUT, "unzip $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|tar.gz|) { - open(OUTPUT, "tar -zxpvf $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|tar.bz2|) { - open(OUTPUT, "tar -jxpvf $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|bz2|) { - open(OUTPUT, "bunzip2 $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|tgz|) { - open(OUTPUT, "tar -zxpvf $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|gz|) { - open(OUTPUT, "gunzip $file 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($file =~ m|tar|) { - open(OUTPUT, "tar -xpvf $file 2> /dev/null |"); - while () { - print "$_
"; - } - 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 "
Decompress complete!
"; + if (@cmd) { + undef($!); + undef($@); + open(OUTPUT,"-|", @cmd, $file); + while () { print "$_
"; } + close(OUTPUT); + print("

Decompress complete.

"); + if ($! || $@) { + print("

An error occurred

$!

$@

"); + } + print(""); + } } }