Add support for Lzip

Signed-off-by: Antonio Diaz Diaz <antonio@gnu.org>
feat/lzip-support
Antonio Diaz Diaz 6 years ago committed by Slávek Banko
parent fc5a2ea7ab
commit 88e74ce7ce
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -8,7 +8,7 @@
<para>The &vfs-lnk; allows you to browse archives as
if it was a directory. Currently &krusader; supports
the following archives types: ace, arj, bzip2, deb, gzip, iso,
lha, rar, rpm, tar, zip and 7-zip and supports the following
lha, lzip, rar, rpm, tar, zip and 7-zip and supports the following
passworded archives: arj, ace, rar and zip. Passwords can be
stored in &tdewallet;. Please note that the archive
support first needs to be properly

@ -106,7 +106,7 @@
<listitem>
<para>Archive Handling: browsing, unpack, pack,
testing. Supported &archives-lnk; : ace,
arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and
arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and
7-zip.</para>
</listitem>
<listitem>

@ -14,7 +14,7 @@
module, viewer/editor, directory synchronization, file content
comparisons, powerful batch renaming and much, much more.
&krusader; supports archive formats: ace, arj, bzip2, deb, gzip, iso, lha,
rar, rpm, tar, zip and 7-zip and handles other
lzip, rar, rpm, tar, zip and 7-zip and handles other
&tdeioslaves1-url; such as smb:// or fish://.</para>
<para>&krusader; is almost completely customizable and therefore
very user-friendly.</para>
@ -95,7 +95,7 @@
ISO,rpm,tar.gz) between these data sources/containers
effortlessly. &krusader; currently supports VFSs for
all popular and some specialized types of archives (ace, arj,
bzip2, gzip, iso, lha, rar, tar, zip and 7-zip), configuration
bzip2, gzip, iso, lha, lzip, rar, tar, zip and 7-zip), configuration
packages (rpm, deb), and traditional remote file system types
(&FTP;, NFS, Samba, FISH, SFTP).</para>
<para>&krusader; also includes a built-in

@ -1070,7 +1070,7 @@ HTML_PARSING-->
certain archive is grayed-out, it means that
&krusader; could not find the appropriate executables
in the configured path. The next archives are supported: ace,
arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and
arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and
7-zip.</para>
<!-- OLD
<screenshot>
@ -1446,6 +1446,20 @@ HTML_PARSING-->
</para>
</entry>
</row>
<row>
<entry>
<para>
<command>lzip</command>
</para>
</entry>
<entry>
<para>
<filename class="directory">
<replaceable>/usr/bin/lzip</replaceable>
</filename>
</para>
</entry>
</row>
<row>
<entry>
<para>
@ -1874,6 +1888,9 @@ HTML_PARSING-->
<listitem>
<para>application/x-lha</para>
</listitem>
<listitem>
<para>application/x-lzip</para>
</listitem>
<listitem>
<para>application/x-rar</para>
</listitem>
@ -1900,6 +1917,9 @@ HTML_PARSING-->
<listitem>
<para>application/x-tgz</para>
</listitem>
<listitem>
<para>application/x-tlz</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist></para>

@ -26,7 +26,7 @@
<para>
<link linkend="archives">Archive VFS</link>: allows to browse
archives in VFS as it was a directory (ace, arj, bzip2, deb,
gzip, iso, lha, rar, rpm, tar, zip and 7-zip).</para>
gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip).</para>
</listitem>
<listitem>
<para>

@ -13,7 +13,7 @@ mounted filesystem support, FTP, advanced search module,
viewer/editor, directory synchronisation, file content comparisons,
powerful batch renaming and much much more.
It supports the following archive formats: ace, arj, bzip2, deb,
gzip, iso, lha, rar, rpm, tar, zip and 7-zip
gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip
and can handle other KIOSlaves such as smb:// or fish://
It is (almost) completely customizable, very user friendly,
fast and looks great on your desktop! :-)
@ -102,7 +102,7 @@ Powerful internal viewer and editor.
Advanced search module that can search in archives.
Supports: ace, arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and 7-zip.
Supports: ace, arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip.
Directory comparison and filtering.

@ -125,6 +125,8 @@ KIso::KIso( const TQString& filename, const TQString & _mimetype )
mimetype = "application/x-gzip";
else if ( mimetype == "application/x-tbz" ) // that's a bzipped2 tar file, so ask for bz2 filter
mimetype = "application/x-bzip2";
else if ( mimetype == "application/x-tlz" ) // that's a lzipped tar file, so ask for lzip filter
mimetype = "application/x-lzip";
else if ( mimetype == "application/x-txz" ) // that's a xzipped tar file, so ask for xz filter
mimetype = "application/x-xz";
else
@ -136,22 +138,23 @@ KIso::KIso( const TQString& filename, const TQString & _mimetype )
unsigned char firstByte = file.getch();
unsigned char secondByte = file.getch();
unsigned char thirdByte = file.getch();
unsigned char fourthByte = file.getch();
if ( firstByte == 0037 && secondByte == 0213 )
mimetype = "application/x-gzip";
else if ( firstByte == 'B' && secondByte == 'Z' && thirdByte == 'h' )
mimetype = "application/x-bzip2";
else if ( firstByte == 'P' && secondByte == 'K' && thirdByte == 3 )
{
unsigned char fourthByte = file.getch();
if ( fourthByte == 4 )
else if ( firstByte == 'L' && secondByte == 'Z' &&
thirdByte == 'I' && fourthByte == 'P' )
mimetype = "application/x-lzip";
else if ( firstByte == 'P' && secondByte == 'K' &&
thirdByte == 3 && fourthByte == 4 )
mimetype = "application/x-zip";
}
else if ( firstByte == 0xfd && secondByte == '7' && thirdByte == 'z' )
else if ( firstByte == 0xfd && secondByte == '7' &&
thirdByte == 'z' && fourthByte == 'X' )
{
unsigned char fourthByte = file.getch();
unsigned char fifthByte = file.getch();
unsigned char sixthByte = file.getch();
if ( fourthByte == 'X' && fifthByte == 'Z' && sixthByte == 0)
if ( fifthByte == 'Z' && sixthByte == 0)
mimetype = "application/x-xz";
}
}
@ -171,7 +174,7 @@ void KIso::prepareDevice( const TQString & filename,
else
{
if("application/x-gzip" == mimetype || "application/x-bzip2" == mimetype ||
"application/x-xz" == mimetype)
"application/x-lzip" == mimetype || "application/x-xz" == mimetype)
forced = true;
TQIODevice *dev = KFilterDev::deviceForFile( filename, mimetype, forced );

@ -313,7 +313,9 @@ void tdeio_krarcProtocol::get(const KURL& url, int tries ){
KMimeType::Ptr mt = KMimeType::findByURL( arcTempDir+file, 0, false /* NOT local URL */ );
emit mimeType( mt->name() );
proc << getCmd << convertName( arcFile->url().path() )+" ";
if( arcType != "gzip" && arcType != "bzip2" && arcType != "xz") proc << convertFileName( file );
if( arcType != "gzip" && arcType != "bzip2" &&
arcType != "lzip" && arcType != "xz" )
proc << convertFileName( file );
connect(&proc,TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)),
this,TQT_SLOT(receivedData(TDEProcess*,char*,int)) );
}
@ -324,7 +326,8 @@ void tdeio_krarcProtocol::get(const KURL& url, int tries ){
if( !extArcReady && !decompressToFile ) {
if( !proc.normalExit() || !checkStatus( proc.exitStatus() ) ||
( arcType != "bzip2" && arcType != "xz" && expectedSize != decompressedLen ) ) {
( arcType != "bzip2" && arcType != "lzip" &&
arcType != "xz" && expectedSize != decompressedLen ) ) {
if( encrypted && tries ) {
invalidatePassword();
get( url, tries - 1 );
@ -679,6 +682,8 @@ bool tdeio_krarcProtocol::setArcFile(const KURL& url){
arcType = "bzip2";
else if( arcType == "tgz" )
arcType = "gzip";
else if( arcType == "tlz" )
arcType = "lzip";
else if( arcType == "txz" )
arcType = "xz";
@ -707,7 +712,7 @@ bool tdeio_krarcProtocol::initDirDict(const KURL&url, bool forced){
KrShellProcess proc;
KTempFile temp( TQString(), "tmp" );
temp.setAutoDelete(true);
if (arcType != "bzip2" && arcType != "xz") {
if( arcType != "bzip2" && arcType != "lzip" && arcType != "xz" ) {
if( arcType == "rpm" )
proc << listCmd << convertName( arcPath ) <<" > " << temp.name();
else
@ -739,7 +744,7 @@ bool tdeio_krarcProtocol::initDirDict(const KURL&url, bool forced){
root->append(entry);
if (arcType == "bzip2" || arcType == "xz"){
if( arcType == "bzip2" || arcType == "lzip" || arcType == "xz" ) {
KRDEBUG("Got me here...");
parseLine(0,"",temp.file());
return true;
@ -1062,6 +1067,14 @@ void tdeio_krarcProtocol::parseLine(int lineNo, TQString line, TQFile*) {
mode = arcFile->mode();
size = arcFile->size();
}
if( arcType == "lzip" ){
if( !lineNo ) return; //ignore the first line
size = nextWord(line).toULong(); // uncompressed size
fullName = arcFile->name();
if( fullName.endsWith(".lz") )
fullName.truncate(fullName.length() - 3);
mode = arcFile->mode();
}
if(arcType == "lha"){
// permissions
perm = nextWord(line);
@ -1311,6 +1324,13 @@ bool tdeio_krarcProtocol::initArcParameters() {
copyCmd = TQString();
delCmd = TQString();
putCmd = TQString();
} else if(arcType == "lzip") {
cmd = fullPathName( "lzip" );
listCmd = cmd + " -l ";
getCmd = cmd + " -dc ";
copyCmd = TQString();
delCmd = TQString();
putCmd = TQString();
} else if(arcType == "arj"){
cmd = fullPathName( "arj" );
listCmd = fullPathName( "arj" ) + " v -y -v ";
@ -1398,7 +1418,8 @@ bool tdeio_krarcProtocol::checkStatus( int exitCode ) {
if( arcType == "zip" || arcType == "rar" || arcType == "7z" )
return exitCode == 0 || exitCode == 1;
else if( arcType == "ace" || arcType == "bzip2" || arcType == "lha" || arcType == "rpm" || arcType == "arj" )
else if( arcType == "ace" || arcType == "bzip2" || arcType == "lha" ||
arcType == "lzip" || arcType == "rpm" || arcType == "arj" )
return exitCode == 0;
else if( arcType == "gzip"|| arcType == "xz" )
return exitCode == 0 || exitCode == 2;
@ -1420,6 +1441,7 @@ TQString tdeio_krarcProtocol::detectArchive( bool &encrypted, TQString fileName
{"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"} };
@ -1451,14 +1473,16 @@ TQString tdeio_krarcProtocol::detectArchive( bool &encrypted, TQString fileName
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" )

@ -63,6 +63,7 @@ PackGUI::PackGUI(TQString defaultName, TQString defaultPath, int noOfFiles, TQSt
if (PS("tar")) typeData->insertItem("tar");
if (PS("tar") && PS("gzip")) typeData->insertItem("tar.gz");
if (PS("tar") && PS("bzip2")) typeData->insertItem("tar.bz2");
if (PS("tar") && PS("lzip")) typeData->insertItem("tar.lz");
if (PS("tar") && PS("xz")) typeData->insertItem("tar.xz");
if (PS("zip")) typeData->insertItem("zip");
if (PS("rar")) typeData->insertItem("rar");

@ -59,6 +59,7 @@ KgArchives::KgArchives( bool first, TQWidget* parent, const char* name ) :
{{"Archives","Do Tar", _DoTar, i18n( "Tar" ), false, ""},
{"Archives","Do GZip", _DoGZip, i18n( "GZip" ), false, ""},
{"Archives","Do BZip2", _DoBZip2, i18n( "BZip2" ), false, ""},
{"Archives","Do LZip", _DoLZip, i18n( "LZip" ), false, ""},
{"Archives","Do UnZip", _DoUnZip, i18n( "Zip" ), false, ""},
{"Archives","Do UnRar", _DoUnRar, i18n( "Rar" ), false, ""},
{"Archives","Do Unarj", _DoArj, i18n( "Arj" ), false, ""},
@ -70,7 +71,7 @@ KgArchives::KgArchives( bool first, TQWidget* parent, const char* name ) :
{"Archives","Do Xz", _DoXz, i18n( "Xz" ), false, ""}
};
cbs = createCheckBoxGroup( 3, 0, packers, 12, generalGrp );
cbs = createCheckBoxGroup( 3, 0, packers, 13, generalGrp );
generalGrid->addWidget( cbs, 1, 0 );
addLabel( generalGrid, 2, 0, i18n( "The archives that are \"greyed-out\" were unavailable on your\nsystem last time Krusader checked. If you wish Krusader to\nsearch again, click the 'Auto Configure' button." ),
@ -126,6 +127,7 @@ void KgArchives::disableNonExistingPackers()
cbs->find( "Do Tar" )->setEnabled(PS("tar"));
cbs->find( "Do GZip" )->setEnabled(PS("gzip"));
cbs->find( "Do BZip2" )->setEnabled(PS("bzip2"));
cbs->find( "Do LZip" )->setEnabled(PS("lzip"));
cbs->find( "Do UnZip" )->setEnabled(PS("unzip"));
cbs->find( "Do Lha" )->setEnabled(PS("lha"));
cbs->find( "Do RPM" )->setEnabled(PS("rpm") || PS("cpio"));

@ -86,14 +86,15 @@ KgDependencies::KgDependencies( bool first, TQWidget* parent, const char* name
addApplication( "dpkg", archGrid1, 4, packers_tab, PAGE_PACKERS );
addApplication( "gzip", archGrid1, 5, packers_tab, PAGE_PACKERS );
addApplication( "lha", archGrid1, 6, packers_tab, PAGE_PACKERS );
addApplication( "rar", archGrid1, 7, packers_tab, PAGE_PACKERS );
addApplication( "tar", archGrid1, 8, packers_tab, PAGE_PACKERS );
addApplication( "unace", archGrid1, 9, packers_tab, PAGE_PACKERS );
addApplication( "unarj", archGrid1,10, packers_tab, PAGE_PACKERS );
addApplication( "unrar", archGrid1,11, packers_tab, PAGE_PACKERS );
addApplication( "unzip", archGrid1,12, packers_tab, PAGE_PACKERS );
addApplication( "zip", archGrid1,13, packers_tab, PAGE_PACKERS );
addApplication( "xz", archGrid1,14, packers_tab, PAGE_PACKERS );
addApplication( "lzip", archGrid1, 7, packers_tab, PAGE_PACKERS );
addApplication( "rar", archGrid1, 8, packers_tab, PAGE_PACKERS );
addApplication( "tar", archGrid1, 9, packers_tab, PAGE_PACKERS );
addApplication( "unace", archGrid1,10, packers_tab, PAGE_PACKERS );
addApplication( "unarj", archGrid1,11, packers_tab, PAGE_PACKERS );
addApplication( "unrar", archGrid1,12, packers_tab, PAGE_PACKERS );
addApplication( "unzip", archGrid1,13, packers_tab, PAGE_PACKERS );
addApplication( "zip", archGrid1,14, packers_tab, PAGE_PACKERS );
addApplication( "xz", archGrid1,15, packers_tab, PAGE_PACKERS );
// ---------------------------- CHECKSUM TAB -------------------------------------
TQWidget *checksum_tab = new TQWidget( tabWidget, "tab_4" );

@ -131,6 +131,7 @@ TQFrame *line2 = createLine( generalGrp, "line2" );
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";

@ -49,13 +49,15 @@ TQString KgProtocols::defaultKrarcMimes = "application/x-7z,application/x-7z-com
"application/x-debian-package,"
"application/x-gzip,application/x-jar,"
"application/x-lha,application/x-lha-compressed,"
"application/x-lzip,"
"application/x-rar,"
"application/x-rpm,"
"application/x-xz,"
"application/x-zip";
TQString KgProtocols::defaultTarMimes = "application/x-tar,application/x-tarz,"
"application/x-compressed-tar,"
"application/x-tbz,application/x-tgz,application/x-txz";
"application/x-tbz,application/x-tgz,"
"application/x-tlz,application/x-txz";
KgProtocols::KgProtocols( bool first, TQWidget* parent, const char* name ) :
KonfiguratorPage( first, parent, name )

@ -102,6 +102,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
Archiver* tar = new Archiver("tar", "http://www.gnu.org", PS("tar"), true, true);
Archiver* gzip = new Archiver("gzip", "http://www.gnu.org", PS("gzip"), true, true);
Archiver* bzip2 = new Archiver("bzip2", "http://www.gnu.org", PS("bzip2"), true, true);
Archiver* lzip = new Archiver("lzip", "http://www.nongnu.org/lzip/lzip.html", PS("lzip"), true, true);
Archiver* lha = new Archiver("lha", "http://www.gnu.org", PS("lha"), true, true);
Archiver* zip = new Archiver("zip", "http://www.info-zip.org", PS("zip"), true, false);
Archiver* unzip = new Archiver("unzip", "http://www.info-zip.org", PS("unzip"), false, true);
@ -139,6 +140,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
addRow(tar, _grid);
addRow(gzip, _grid);
addRow(bzip2, _grid);
addRow(lzip, _grid);
addRow(lha, _grid);
addRow(zip, _grid);
addRow(unzip, _grid);
@ -155,6 +157,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
delete tar;
delete gzip;
delete bzip2;
delete lzip;
delete lha;
delete zip;
delete unzip;

@ -1318,6 +1318,7 @@ void KrBriefView::initProperties() {
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";
TQStringList atomicExtensions = krConfig->readListEntry("Atomic Extensions", defaultAtomicExtensions);

@ -1029,7 +1029,8 @@ void KrDetailedView::keyPressEvent( TQKeyEvent * e ) {
if( KRarcHandler::arcSupported( type ) ) {
KURL url = i->VF->vfile_getUrl();
if( type == "-tar" || type == "-tgz" || type == "-tbz" )
if( type == "-tar" || type == "-tgz" ||
type == "-tbz" || type == "-tlz" )
url.setProtocol( "tar" );
else
url.setProtocol( "krarc" );
@ -1413,6 +1414,7 @@ void KrDetailedView::initProperties() {
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";
TQStringList atomicExtensions = krConfig->readListEntry("Atomic Extensions", defaultAtomicExtensions);

@ -11,6 +11,7 @@
TQString atomicExtensions[] = {
".tar.gz",
".tar.bz2",
".tar.lz",
".moc.cpp",
".tar.xz",
};

@ -173,7 +173,8 @@ void KRSearchMod::scanLocalDir( KURL urlToScan )
TQString realType = KRarcHandler::getType( encrypted, url.path(), mime );
if( !encrypted ) {
if ( realType == "-tbz" || realType == "-tgz" || realType == "tarz" || realType == "-tar" )
if ( realType == "-tbz" || realType == "-tgz" || realType == "-tlz" ||
realType == "tarz" || realType == "-tar" )
archiveURL.setProtocol( "tar" );
else
archiveURL.setProtocol( "krarc" );

@ -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";
@ -124,6 +133,14 @@ arc_vfs::arc_vfs(TQString origin,TQString type,TQObject* panel,bool write):
addCmd = cmd+" -uvjf";
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);
@ -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();

@ -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" )

@ -173,6 +173,8 @@
#define _DoUnZip true
// Do BZip2 ///////////
#define _DoBZip2 true
// Do LZip ////////////
#define _DoLZip true
// Do Rar /////////////
#define _DoRar true
// Do UnRar ///////////

Loading…
Cancel
Save