summaryrefslogtreecommitdiffstats
path: root/krusader/VFS
diff options
context:
space:
mode:
Diffstat (limited to 'krusader/VFS')
-rwxr-xr-xkrusader/VFS/arc_vfs.cpp43
-rw-r--r--krusader/VFS/krarchandler.cpp32
2 files changed, 58 insertions, 17 deletions
diff --git a/krusader/VFS/arc_vfs.cpp b/krusader/VFS/arc_vfs.cpp
index cd0f168..1b4a269 100755
--- a/krusader/VFS/arc_vfs.cpp
+++ b/krusader/VFS/arc_vfs.cpp
@@ -102,6 +102,15 @@ arc_vfs::arc_vfs(TQString origin,TQString type,TQObject* panel,bool write):
ignoreLines = -1;
isWritable = false;
}
+ if( type == "lzip" ){
+ cmd = KrServices::fullPathName ( "lzip" );
+ listCmd = " -l ";
+ delCmd = "";
+ addCmd = cmd + " -c ";
+ getCmd = " -dc ";
+ ignoreLines = -1;
+ isWritable = false;
+ }
if(type == "-tar"){
cmd = KrServices::fullPathName( "tar" );
listCmd = " -tvf";
@@ -125,6 +134,14 @@ arc_vfs::arc_vfs(TQString origin,TQString type,TQObject* panel,bool write):
getCmd = " -xjvf";
isWritable = false;
}
+ if(type == "-tlz"){
+ cmd = KrServices::fullPathName( "tar" );
+ listCmd = " -tvf"; // tar detects format automatically
+ delCmd = "";
+ addCmd = ""; // compressed tar archives can't be modified
+ getCmd = " -xvf";
+ isWritable = false;
+ }
if(type == "-zip"){
password = KRarcHandler::getPassword(arcFile,type);
cmd = KrServices::fullPathName( "unzip" );
@@ -233,7 +250,7 @@ bool arc_vfs::getDirs(){
temp.open(IO_ReadOnly);
char buf[1000];
TQString line;
- if(vfs_type == "gzip" || vfs_type == "-zip" )
+ if( vfs_type == "gzip" || vfs_type == "lzip" || vfs_type == "-zip" )
temp.readLine(line,10000); // skip the first line - it's garbage
if( vfs_type == "-rar" ){
while(temp.readLine(line,10000) != -1)
@@ -399,7 +416,8 @@ KURL::List* arc_vfs::vfs_getFiles(TQStringList* names){
krApp, TQT_SLOT(incProgress(TDEProcess*,char*,int)) );
proc << cmd << getCmd << "\""+arcFile+"\"";
- if( vfs_type == "gzip" || vfs_type == "zip2" ) proc << ">";
+ if( vfs_type == "gzip" || vfs_type == "zip2" || vfs_type == "lzip" )
+ proc << ">";
for(unsigned int i=0 ; i < files.count() ; ){
proc << (prefix+*files.at(i++));
if ( i%MAX_FILES==0 || i==files.count() ){
@@ -595,7 +613,8 @@ void arc_vfs::repack(){
}
// finaly repack tmpDir
- if( vfs_isWritable() || vfs_type=="gzip" || vfs_type=="zip2" ){
+ if( vfs_isWritable() || vfs_type == "gzip" ||
+ vfs_type == "zip2" || vfs_type == "lzip" ){
TQStringList filesToPack;
getFilesToPack(&filesToPack);
if( !filesToPack.isEmpty() ){
@@ -604,7 +623,7 @@ void arc_vfs::repack(){
connect(&addProc,TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)),
krApp, TQT_SLOT(incProgress(TDEProcess*,char*,int)) );
- if( vfs_type=="gzip" || vfs_type=="zip2" ){
+ if( vfs_type == "gzip" || vfs_type == "zip2" || vfs_type == "lzip" ){
addProc << addCmd << *filesToPack.at(0)<< ">" << "\""+arcFile+"\"";
addProc.start(TDEProcess::NotifyOnExit);
while( addProc.isRunning() ) tqApp->processEvents();
@@ -752,16 +771,19 @@ void arc_vfs::parseLine(TQString line, TQFile* temp){
mode_t mode = 0;
- // parse gziped files
- if(vfs_type == "gzip"){
+ // parse gziped and lzipped files
+ if( vfs_type == "gzip" || vfs_type == "lzip" ) {
KDE_struct_stat stat_p;
KDE_stat(arcFile.local8Bit(),&stat_p);
- nextWord(line);
- size = nextWord(line).toLong();
- nextWord(line);
+ if( vfs_type == "gzip" ) nextWord(line); // gzip compressed size
+ size = nextWord(line).toLong(); // uncompressed size
+ if( vfs_type == "lzip" ) nextWord(line); // lzip compressed size
+ nextWord(line); // ratio or saved
name = nextWord(line,'\n');
if(name.contains('/')) name = name.mid(name.findRev('/')+1,name.length());
+ if( vfs_type == "lzip" && name.endsWith(".lz") )
+ name.truncate(name.length() - 3);
perm = KRpermHandler::mode2TQString(stat_p.st_mode) ;
owner = KRpermHandler::user2uid(qfi.owner());
group = KRpermHandler::group2gid(qfi.group());
@@ -783,7 +805,8 @@ void arc_vfs::parseLine(TQString line, TQFile* temp){
}
// parse tar files
- if(vfs_type == "-tar" || vfs_type == "-tbz" || vfs_type == "-tgz" ){
+ if(vfs_type == "-tar" || vfs_type == "-tbz" ||
+ vfs_type == "-tgz" || vfs_type == "-tlz" ){
perm = nextWord(line);
TQString temp = nextWord(line);
owner = temp.left(temp.findRev('/')).toInt();
diff --git a/krusader/VFS/krarchandler.cpp b/krusader/VFS/krarchandler.cpp
index 1e744f2..616b465 100644
--- a/krusader/VFS/krarchandler.cpp
+++ b/krusader/VFS/krarchandler.cpp
@@ -46,7 +46,7 @@
#include "../krservices.h"
#include "../Dialogs/krpleasewait.h"
-static TQStringList arcProtocols = TQStringList::split(";", "tar;bzip;bzip2;gzip;krarc;zip;xz");
+static TQStringList arcProtocols = TQStringList::split(";", "tar;bzip;bzip2;gzip;krarc;lzip;zip;xz");
TDEWallet::Wallet * KRarcHandler::wallet = 0;
@@ -57,6 +57,7 @@ TQStringList KRarcHandler::supportedPackers() {
if ( KrServices::cmdExist( "tar" ) ) packers.append( "tar" );
if ( KrServices::cmdExist( "gzip" ) ) packers.append( "gzip" );
if ( KrServices::cmdExist( "bzip2" ) ) packers.append( "bzip2" );
+ if ( KrServices::cmdExist( "lzip" ) ) packers.append( "lzip" );
if ( KrServices::cmdExist( "unzip" ) ) packers.append( "unzip" );
if ( KrServices::cmdExist( "zip" ) ) packers.append( "zip" );
if ( KrServices::cmdExist( "lha" ) ) packers.append( "lha" );
@@ -91,6 +92,8 @@ bool KRarcHandler::arcSupported( TQString type ) {
return true;
else if ( type == "-tgz" && lst.contains( "tar" ) )
return true;
+ else if ( type == "-tlz" && lst.contains( "tar" ) )
+ return true;
else if ( type == "-txz" && lst.contains( "tar" ) )
return true;
else if ( type == "tarz" && lst.contains( "tar" ) )
@@ -99,6 +102,8 @@ bool KRarcHandler::arcSupported( TQString type ) {
return true;
else if ( type == "zip2" && lst.contains( "bzip2" ) )
return true;
+ else if ( type == "lzip" && lst.contains( "lzip" ) )
+ return true;
else if ( type == "-lha" && lst.contains( "lha" ) )
return true;
else if ( type == "-ace" && lst.contains( "unace" ) )
@@ -130,9 +135,11 @@ bool KRarcHandler::arcHandled( TQString type ) {
( type == "tarz" && krConfig->readBoolEntry( "Do GZip" , _DoGZip ) ) ||
( type == "-tar" && krConfig->readBoolEntry( "Do Tar" , _DoTar ) ) ||
( type == "-tbz" && krConfig->readBoolEntry( "Do BZip2", _DoBZip2 ) ) ||
+ ( type == "-tlz" && krConfig->readBoolEntry( "Do LZip" , _DoLZip ) ) ||
( type == "-txz" && krConfig->readBoolEntry( "Do Xz" , _DoXz ) ) ||
( type == "gzip" && krConfig->readBoolEntry( "Do GZip" , _DoGZip ) ) ||
( type == "zip2" && krConfig->readBoolEntry( "Do BZip2", _DoBZip2 ) ) ||
+ ( type == "lzip" && krConfig->readBoolEntry( "Do LZip" , _DoLZip ) ) ||
( type == "-zip" && krConfig->readBoolEntry( "Do UnZip", _DoUnZip ) ) ||
( type == "-lha" && krConfig->readBoolEntry( "Do Lha" , _DoUnZip ) ) ||
( type == "-rar" && krConfig->readBoolEntry( "Do UnRar", _DoUnRar ) ) ||
@@ -155,8 +162,9 @@ long KRarcHandler::arcFileCount( TQString archive, TQString type, TQString passw
// first check if supported
if ( !arcSupported( type ) ) return 0;
- // bzip, gzip and xz archives contain only one file
- if ( type == "zip2" || type == "gzip" || type == "-xz") return 1L;
+ // bzip, gzip, lzip and xz archives contain only one file
+ if ( type == "zip2" || type == "gzip" || type == "lzip" || type == "-xz" )
+ return 1L;
// set the right lister to do the job
TQString lister;
@@ -166,6 +174,7 @@ long KRarcHandler::arcFileCount( TQString archive, TQString type, TQString passw
else if ( type == "-tgz" ) lister = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "tarz" ) lister = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "-tbz" ) lister = KrServices::fullPathName( "tar" ) + " -tjvf";
+ else if ( type == "-tlz" ) lister = KrServices::fullPathName( "tar" ) + " -tvf";
else if ( type == "-txz" ) lister = KrServices::fullPathName( "tar" ) + " -tJvf";
else if ( type == "-lha" ) lister = KrServices::fullPathName( "lha" ) + " l";
else if ( type == "-rar" ) lister = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " l -v";
@@ -250,9 +259,11 @@ bool KRarcHandler::unpack( TQString archive, TQString type, TQString password, T
else if ( type == "-tgz" ) packer = KrServices::fullPathName( "tar" ) + " -xvzf";
else if ( type == "tarz" ) packer = KrServices::fullPathName( "tar" ) + " -xvzf";
else if ( type == "-tbz" ) packer = KrServices::fullPathName( "tar" ) + " -xjvf";
+ else if ( type == "-tlz" ) packer = KrServices::fullPathName( "tar" ) + " -xvf";
else if ( type == "-txz" ) packer = KrServices::fullPathName( "tar" ) + " -xJvf";
else if ( type == "gzip" ) packer = KrServices::fullPathName( "gzip" ) + " -cd";
else if ( type == "zip2" ) packer = KrServices::fullPathName( "bzip2" ) + " -cdk";
+ else if ( type == "lzip" ) packer = KrServices::fullPathName( "lzip" ) + " -cd";
else if ( type == "-lha" ) packer = KrServices::fullPathName( "lha" ) + " xf";
else if ( type == "-rar" ) packer = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " -y x";
else if ( type == "-ace" ) packer = KrServices::fullPathName( "unace" ) + " x";
@@ -309,7 +320,7 @@ bool KRarcHandler::unpack( TQString archive, TQString type, TQString password, T
// unpack the files
KrShellProcess proc;
proc << packer << " " + KrServices::quote( archive );
- if( type == "zip2" || type=="gzip" ){
+ if( type == "zip2" || type=="gzip" || type=="lzip" ){
TQString arcname = archive.mid(archive.findRev("/")+1);
if( arcname.contains(".") ) arcname = arcname.left(arcname.findRev("."));
proc << ">" << KrServices::quote( dest+"/"+arcname );
@@ -365,9 +376,11 @@ bool KRarcHandler::test( TQString archive, TQString type, TQString password, lon
else if ( type == "-tgz" ) packer = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "tarz" ) packer = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "-tbz" ) packer = KrServices::fullPathName( "tar" ) + " -tjvf";
+ else if ( type == "-tlz" ) packer = KrServices::fullPathName( "tar" ) + " -tvf";
else if ( type == "-txz" ) packer = KrServices::fullPathName( "tar" ) + " -tJvf";
else if ( type == "gzip" ) packer = KrServices::fullPathName( "gzip" ) + " -tv";
else if ( type == "zip2" ) packer = KrServices::fullPathName( "bzip2" ) + " -tv";
+ else if ( type == "lzip" ) packer = KrServices::fullPathName( "lzip" ) + " -tv";
else if ( type == "-rar" ) packer = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " t";
else if ( type == "-ace" ) packer = KrServices::fullPathName( "unace" ) + " t";
else if ( type == "-lha" ) packer = KrServices::fullPathName( "lha" ) + " t";
@@ -424,6 +437,7 @@ bool KRarcHandler::pack( TQStringList fileNames, TQString type, TQString dest, l
else if ( type == "tar" ) { packer = KrServices::fullPathName( "tar" ) + " -cvf"; type = "-tar"; }
else if ( type == "tar.gz" ) { packer = KrServices::fullPathName( "tar" ) + " -cvzf"; type = "-tgz"; }
else if ( type == "tar.bz2" ) { packer = KrServices::fullPathName( "tar" ) + " -cvjf"; type = "-tbz"; }
+ else if ( type == "tar.lz" ) { packer = KrServices::fullPathName( "tar" ) + " -cv --lzip -f"; type = "-tlz"; }
else if ( type == "tar.xz" ) { packer = KrServices::fullPathName( "tar" ) + " -cvJf"; type = "-txz"; }
else if ( type == "rar" ) { packer = KrServices::fullPathName( "rar" ) + " -r a"; type = "-rar"; }
else if ( type == "lha" ) { packer = KrServices::fullPathName( "lha" ) + " a"; type = "-lha"; }
@@ -627,7 +641,8 @@ bool KRarcHandler::checkStatus( TQString type, int exitCode ) {
return exitCode == 0 || exitCode == 1;
else if( type == "-ace" || type == "zip2" || type == "-lha" || type == "-rpm" || type == "cpio" ||
type == "-tar" || type == "tarz" || type == "-tbz" || type == "-tgz" || type == "-arj" ||
- type == "-deb" || type == "-txz")
+ type == "lzip" || type == "-tlz" ||
+ type == "-deb" || type == "-txz" )
return exitCode == 0;
else if (type == "gzip" || type == "-xz")
return exitCode == 0 || exitCode == 2;
@@ -649,6 +664,7 @@ TQString KRarcHandler::detectArchive( bool &encrypted, TQString fileName, bool c
{"ace", 7, "**ACE**" },
{"bzip2",0, "\x42\x5a\x68\x39\x31" },
{"gzip", 0, "\x1f\x8b"},
+ {"lzip", 0, "\x4c\x5a\x49\x50\x01" },
{"deb", 0, "!<arch>\ndebian-binary " },
{"7z", 0, "7z\xbc\xaf\x27\x1c" },
{"xz", 0, "\xfd" "7zXZ\x00" } };
@@ -680,14 +696,16 @@ TQString KRarcHandler::detectArchive( bool &encrypted, TQString fileName, bool c
if( j == detectionString.length() ) {
TQString type = autoDetectParams[ i ].type;
- if( type == "bzip2" || type == "gzip" ) {
+ if( type == "bzip2" || type == "gzip" || type == "lzip" ) {
KTar tapeArchive( fileName );
if( tapeArchive.open( IO_ReadOnly ) ) {
tapeArchive.close();
if( type == "bzip2" )
type = "tbz";
- else
+ else if( type == "gzip" )
type = "tgz";
+ else
+ type = "tlz";
}
}
else if( type == "zip" )