summaryrefslogtreecommitdiffstats
path: root/kioslave/tar
diff options
context:
space:
mode:
Diffstat (limited to 'kioslave/tar')
-rw-r--r--kioslave/tar/CMakeLists.txt37
-rw-r--r--kioslave/tar/Makefile.am24
-rw-r--r--kioslave/tar/ar.protocol12
-rw-r--r--kioslave/tar/ktartest.cpp201
-rw-r--r--kioslave/tar/tar.cc623
-rw-r--r--kioslave/tar/tar.h55
-rw-r--r--kioslave/tar/tar.protocol12
-rw-r--r--kioslave/tar/zip.protocol12
8 files changed, 0 insertions, 976 deletions
diff --git a/kioslave/tar/CMakeLists.txt b/kioslave/tar/CMakeLists.txt
deleted file mode 100644
index 4e7bbcb3f..000000000
--- a/kioslave/tar/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-#################################################
-#
-# (C) 2010-2011 Serghei Amelian
-# serghei (DOT) amelian (AT) gmail.com
-#
-# Improvements and feedback are welcome
-#
-# This file is released under GPL >= 2
-#
-#################################################
-
-include_directories(
- ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_BINARY_DIR}
- ${TDE_INCLUDE_DIR}
- ${TQT_INCLUDE_DIRS}
-)
-
-link_directories(
- ${TQT_LIBRARY_DIRS}
-)
-
-
-##### other data ################################
-
-install( FILES tar.protocol ar.protocol zip.protocol DESTINATION ${SERVICES_INSTALL_DIR} )
-
-
-##### kio_tar (module) #######################
-
-set( target kio_tar )
-
-tde_add_kpart( ${target} AUTOMOC
- SOURCES tar.cc
- LINK kio-shared
- DESTINATION ${PLUGIN_INSTALL_DIR}
-)
diff --git a/kioslave/tar/Makefile.am b/kioslave/tar/Makefile.am
deleted file mode 100644
index d77b2abf9..000000000
--- a/kioslave/tar/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-## Makefile.am of tdebase/kioslave/tar
-
-INCLUDES = $(all_includes)
-AM_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx $(LIB_KIO) -ltdetexteditor
-METASOURCES = AUTO
-
-kde_module_LTLIBRARIES = kio_tar.la
-
-kio_tar_la_SOURCES = tar.cc
-kio_tar_la_LIBADD = $(LIB_KSYCOCA)
-kio_tar_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
-
-check_PROGRAMS = ktartest
-
-ktartest_SOURCES = ktartest.cpp
-ktartest_LDADD = $(LIB_KSYCOCA)
-
-noinst_HEADERS = tar.h
-
-kdelnk_DATA = tar.protocol ar.protocol zip.protocol
-kdelnkdir = $(kde_servicesdir)
-
-messages:
- $(XGETTEXT) *.cc -o $(podir)/kio_tar.pot
diff --git a/kioslave/tar/ar.protocol b/kioslave/tar/ar.protocol
deleted file mode 100644
index 7bdc3e746..000000000
--- a/kioslave/tar/ar.protocol
+++ /dev/null
@@ -1,12 +0,0 @@
-[Protocol]
-exec=kio_tar
-protocol=ar
-mimetype=application/x-archive
-input=filesystem
-output=filesystem
-listing=Name,Type,Size,Date,Access,Owner,Group,Link
-reading=true
-source=true
-DocPath=kioslave/ar.html
-Icon=ar
-Class=:local
diff --git a/kioslave/tar/ktartest.cpp b/kioslave/tar/ktartest.cpp
deleted file mode 100644
index efb1e42fe..000000000
--- a/kioslave/tar/ktartest.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#include "ktar.h"
-#include <stdio.h>
-#include <tqfile.h>
-#include <kinstance.h>
-#include <kdebug.h>
-
-void recursive_print( const KTarDirectory * dir, const TQString & path )
-{
- TQStringList l = dir->entries();
- TQStringList::Iterator it = l.begin();
- for( ; it != l.end(); ++it )
- {
- const KTarEntry* entry = dir->entry( (*it) );
- printf("mode=%07o %s %s %s%s\n", entry->permissions(), entry->user().latin1(), entry->group().latin1(), path.latin1(), (*it).latin1());
- if (entry->isDirectory())
- recursive_print( (KTarDirectory *)entry, path+(*it)+"/" );
- }
-}
-
-static void usage()
-{
- printf("\n"
- " Usage :\n"
- " ./ktartest list /path/to/existing_file.tar.gz tests listing an existing tar.gz\n"
- " ./ktartest get /path/to/existing_file.tar.gz filename tests extracting a file.\n"
- " ./ktartest readwrite newfile.tar.gz will create the tar.gz, then close and reopen it.\n"
- " ./ktartest maxlength newfile.tar.gz tests the maximum filename length allowed.\n"
- " ./ktartest bytearray /path/to/existing_file.tar.gz tests KTarData\n");
-}
-
-int main( int argc, char** argv )
-{
- if (argc < 3)
- {
- usage();
- return 1;
- }
- TDEInstance instance("ktartest");
-
- TQString command = argv[1];
- kdDebug() << "main: command=" << command << endl;
- if ( command == "list" )
- {
- KTarGz tar( argv[2] );
-
- if ( !tar.open( IO_ReadOnly ) )
- {
- printf("Could not open %s for reading\n", argv[1] );
- return 1;
- }
-
- const KTarDirectory* dir = tar.directory();
-
- //printf("calling recursive_print\n");
- recursive_print( dir, "" );
- //printf("recursive_print called\n");
-
- tar.close();
-
- return 0;
- }
- else if ( command == "get" )
- {
- if ( argc != 4 )
- {
- usage();
- return 1;
- }
-
- KTarGz tar( argv[2] );
-
- if ( !tar.open( IO_ReadOnly ) )
- {
- printf("Could not open %s for reading\n", argv[1] );
- return 1;
- }
-
- const KTarDirectory* dir = tar.directory();
-
- const KTarEntry* e = dir->entry( argv[3] );
- Q_ASSERT( e && e->isFile() );
- const KTarFile* f = (KTarFile*)e;
-
- TQByteArray arr( f->data() );
- printf("SIZE=%i\n",arr.size() );
- TQString str( arr );
- printf("DATA=%s\n", str.latin1());
-
- /*
- // This is what KGzipDev::readAll could do, if TQIODevice::readAll was virtual....
- TQByteArray array(1024);
- int n;
- while ( ( n = dev.readBlock( array.data(), array.size() ) ) )
- {
- kdDebug() << "readBlock returned " << n << endl << endl;
- TQCString s(array,n+1); // Terminate with 0 before printing
- printf("%s", s.data());
- }
- dev.close();
- */
-
-
- tar.close();
- }
- else if (command == "readwrite" )
- {
- kdDebug() << " --- readwrite --- " << endl;
- KTarGz tar( argv[2] );
-
- if ( !tar.open( IO_WriteOnly ) )
- {
- printf("Could not open %s for writing\n", argv[1]);
- return 1;
- }
-
- tar.writeFile( "empty", "weis", "users", 0, "" );
- tar.writeFile( "test1", "weis", "users", 5, "Hallo" );
- tar.writeFile( "test2", "weis", "users", 8, "Hallo Du" );
- tar.writeFile( "mydir/test3", "weis", "users", 13, "Noch so einer" );
- tar.writeFile( "my/dir/test3", "dfaure", "hackers", 29, "I don't speak German (David)" );
-
-#define SIZE1 100
- // Now a medium file : 100 null bytes
- char medium[ SIZE1 ];
- memset( medium, 0, SIZE1 );
- tar.writeFile( "mediumfile", "user", "group", SIZE1, medium );
- // Another one, with an absolute path
- tar.writeFile( "/dir/subdir/mediumfile2", "user", "group", SIZE1, medium );
-
- // Now a huge file : 20000 null bytes
- int n = 20000;
- char * huge = new char[ n ];
- memset( huge, 0, n );
- tar.writeFile( "hugefile", "user", "group", n, huge );
- delete [] huge;
-
- tar.close();
-
- printf("-----------------------\n");
-
- if ( !tar.open( IO_ReadOnly ) )
- {
- printf("Could not open %s for reading\n", argv[1] );
- return 1;
- }
-
- const KTarDirectory* dir = tar.directory();
- recursive_print(dir, "");
-
- const KTarEntry* e = dir->entry( "mydir/test3" );
- Q_ASSERT( e && e->isFile() );
- const KTarFile* f = (KTarFile*)e;
-
- TQByteArray arr( f->data() );
- printf("SIZE=%i\n",arr.size() );
- TQString str( arr );
- printf("DATA=%s\n", str.latin1());
-
- tar.close();
-
- return 0;
- }
- else if ( command == "maxlength" )
- {
- KTarGz tar( argv[2] );
-
- if ( !tar.open( IO_WriteOnly ) )
- {
- printf("Could not open %s for writing\n", argv[1]);
- return 1;
- }
- // Generate long filenames of each possible length bigger than 98...
- for (int i = 98; i < 500 ; i++ )
- {
- TQString str, num;
- str.fill( 'a', i-10 );
- num.setNum( i );
- num = num.rightJustify( 10, '0' );
- tar.writeFile( str+num, "testu", "testg", 3, "hum" );
- }
- // Result of this test : it fails at 482 (instead of 154 previously).
- // Ok, I think we can do with that :)
- tar.close();
- printf("Now run 'tar tvzf %s'\n", argv[2]);
- return 0;
- }
- else if ( command == "bytearray" )
- {
- TQFile file( argv[2] );
- if ( !file.open( IO_ReadOnly ) )
- return 1;
- KTarGz tar( &file );
- tar.open( IO_ReadOnly );
- const KTarDirectory* dir = tar.directory();
- recursive_print( dir, "" );
- return 0;
- }
- else
- printf("Unknown command\n");
-}
-
diff --git a/kioslave/tar/tar.cc b/kioslave/tar/tar.cc
deleted file mode 100644
index e56b9941c..000000000
--- a/kioslave/tar/tar.cc
+++ /dev/null
@@ -1,623 +0,0 @@
-#include <config.h>
-
-#include <sys/types.h>
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <tqfile.h>
-
-#include <kglobal.h>
-#include <kurl.h>
-#include <kdebug.h>
-#include <kinstance.h>
-#include <ktar.h>
-#include <kzip.h>
-#include <kar.h>
-#include <kmimemagic.h>
-#include <klocale.h>
-#include <kde_file.h>
-#include <kio/global.h>
-#include <kremoteencoding.h>
-
-#include <errno.h> // to be removed
-
-#include "tar.h"
-
-using namespace TDEIO;
-
-extern "C" { int KDE_EXPORT kdemain(int argc, char **argv); }
-
-int kdemain( int argc, char **argv )
-{
- TDEInstance instance( "kio_tar" );
-
- kdDebug(7109) << "Starting " << getpid() << endl;
-
- if (argc != 4)
- {
- fprintf(stderr, "Usage: kio_tar protocol domain-socket1 domain-socket2\n");
- exit(-1);
- }
-
- ArchiveProtocol slave(argv[2], argv[3]);
- slave.dispatchLoop();
-
- kdDebug(7109) << "Done" << endl;
- return 0;
-}
-
-ArchiveProtocol::ArchiveProtocol( const TQCString &pool, const TQCString &app ) : SlaveBase( "tar", pool, app )
-{
- kdDebug( 7109 ) << "ArchiveProtocol::ArchiveProtocol" << endl;
- m_archiveFile = 0L;
-}
-
-ArchiveProtocol::~ArchiveProtocol()
-{
- delete m_archiveFile;
-}
-
-bool ArchiveProtocol::checkNewFile( const KURL & url, TQString & path, TDEIO::Error& errorNum )
-{
- TQString fullPath = url.path();
- kdDebug(7109) << "ArchiveProtocol::checkNewFile " << fullPath << endl;
-
-
- // Are we already looking at that file ?
- if ( m_archiveFile && m_archiveName == fullPath.left(m_archiveName.length()) )
- {
- // Has it changed ?
- KDE_struct_stat statbuf;
- if ( KDE_stat( TQFile::encodeName( m_archiveName ), &statbuf ) == 0 )
- {
- if ( m_mtime == statbuf.st_mtime )
- {
- path = fullPath.mid( m_archiveName.length() );
- kdDebug(7109) << "ArchiveProtocol::checkNewFile returning " << path << endl;
- return true;
- }
- }
- }
- kdDebug(7109) << "Need to open a new file" << endl;
-
- // Close previous file
- if ( m_archiveFile )
- {
- m_archiveFile->close();
- delete m_archiveFile;
- m_archiveFile = 0L;
- }
-
- // Find where the tar file is in the full path
- int pos = 0;
- TQString archiveFile;
- path = TQString::null;
-
- int len = fullPath.length();
- if ( len != 0 && fullPath[ len - 1 ] != '/' )
- fullPath += '/';
-
- kdDebug(7109) << "the full path is " << fullPath << endl;
- KDE_struct_stat statbuf;
- statbuf.st_mode = 0; // be sure to clear the directory bit
- while ( (pos=fullPath.find( '/', pos+1 )) != -1 )
- {
- TQString tryPath = fullPath.left( pos );
- kdDebug(7109) << fullPath << " trying " << tryPath << endl;
- if ( KDE_stat( TQFile::encodeName(tryPath), &statbuf ) == -1 )
- {
- // We are not in the file system anymore, either we have already enough data or we will never get any useful data anymore
- break;
- }
- if ( !S_ISDIR(statbuf.st_mode) )
- {
- archiveFile = tryPath;
- m_mtime = statbuf.st_mtime;
- path = fullPath.mid( pos + 1 );
- kdDebug(7109) << "fullPath=" << fullPath << " path=" << path << endl;
- len = path.length();
- if ( len > 1 )
- {
- if ( path[ len - 1 ] == '/' )
- path.truncate( len - 1 );
- }
- else
- path = TQString::fromLatin1("/");
- kdDebug(7109) << "Found. archiveFile=" << archiveFile << " path=" << path << endl;
- break;
- }
- }
- if ( archiveFile.isEmpty() )
- {
- kdDebug(7109) << "ArchiveProtocol::checkNewFile: not found" << endl;
- if ( S_ISDIR(statbuf.st_mode) ) // Was the last stat about a directory?
- {
- // Too bad, it is a directory, not an archive.
- kdDebug(7109) << "Path is a directory, not an archive." << endl;
- errorNum = TDEIO::ERR_IS_DIRECTORY;
- }
- else
- errorNum = TDEIO::ERR_DOES_NOT_EXIST;
- return false;
- }
-
- // Open new file
- if ( url.protocol() == "tar" ) {
- kdDebug(7109) << "Opening KTar on " << archiveFile << endl;
- m_archiveFile = new KTar( archiveFile );
- } else if ( url.protocol() == "ar" ) {
- kdDebug(7109) << "Opening KAr on " << archiveFile << endl;
- m_archiveFile = new KAr( archiveFile );
- } else if ( url.protocol() == "zip" ) {
- kdDebug(7109) << "Opening KZip on " << archiveFile << endl;
- m_archiveFile = new KZip( archiveFile );
- } else {
- kdWarning(7109) << "Protocol " << url.protocol() << " not supported by this IOSlave" << endl;
- errorNum = TDEIO::ERR_UNSUPPORTED_PROTOCOL;
- return false;
- }
-
- if ( !m_archiveFile->open( IO_ReadOnly ) )
- {
- kdDebug(7109) << "Opening " << archiveFile << "failed." << endl;
- delete m_archiveFile;
- m_archiveFile = 0L;
- errorNum = TDEIO::ERR_CANNOT_OPEN_FOR_READING;
- return false;
- }
-
- m_archiveName = archiveFile;
- return true;
-}
-
-
-void ArchiveProtocol::createUDSEntry( const KArchiveEntry * archiveEntry, UDSEntry & entry )
-{
- UDSAtom atom;
- entry.clear();
- atom.m_uds = UDS_NAME;
- atom.m_str = remoteEncoding()->decode(archiveEntry->name().local8Bit());
- entry.append(atom);
-
- atom.m_uds = UDS_FILE_TYPE;
- atom.m_long = archiveEntry->permissions() & S_IFMT; // keep file type only
- entry.append( atom );
-
- atom.m_uds = UDS_SIZE;
- atom.m_long = archiveEntry->isFile() ? ((KArchiveFile *)archiveEntry)->size() : 0L ;
- entry.append( atom );
-
- atom.m_uds = UDS_MODIFICATION_TIME;
- atom.m_long = archiveEntry->date();
- entry.append( atom );
-
- atom.m_uds = UDS_ACCESS;
- atom.m_long = archiveEntry->permissions() & 07777; // keep permissions only
- entry.append( atom );
-
- atom.m_uds = UDS_USER;
- atom.m_str = remoteEncoding()->decode(archiveEntry->user().local8Bit());
- entry.append( atom );
-
- atom.m_uds = UDS_GROUP;
- atom.m_str = remoteEncoding()->decode(archiveEntry->group().local8Bit());
- entry.append( atom );
-
- atom.m_uds = UDS_LINK_DEST;
- atom.m_str = remoteEncoding()->decode(archiveEntry->symlink().local8Bit());
- entry.append( atom );
-}
-
-void ArchiveProtocol::listDir( const KURL & url )
-{
- kdDebug( 7109 ) << "ArchiveProtocol::listDir " << url << endl;
-
- TQString path;
- TDEIO::Error errorNum;
- if ( !checkNewFile( url, path, errorNum ) )
- {
- if ( errorNum == TDEIO::ERR_CANNOT_OPEN_FOR_READING )
- {
- // If we cannot open, it might be a problem with the archive header (e.g. unsupported format)
- // Therefore give a more specific error message
- error( TDEIO::ERR_SLAVE_DEFINED,
- i18n( "Could not open the file, probably due to an unsupported file format.\n%1")
- .arg( url.prettyURL() ) );
- return;
- }
- else if ( errorNum != ERR_IS_DIRECTORY )
- {
- // We have any other error
- error( errorNum, url.prettyURL() );
- return;
- }
- // It's a real dir -> redirect
- KURL redir;
- redir.setPath( url.path() );
- kdDebug( 7109 ) << "Ok, redirection to " << redir.url() << endl;
- redirection( redir );
- finished();
- // And let go of the tar file - for people who want to unmount a cdrom after that
- delete m_archiveFile;
- m_archiveFile = 0L;
- return;
- }
-
- if ( path.isEmpty() )
- {
- KURL redir( url.protocol() + TQString::fromLatin1( ":/") );
- kdDebug( 7109 ) << "url.path()==" << url.path() << endl;
- redir.setPath( url.path() + TQString::fromLatin1("/") );
- kdDebug( 7109 ) << "ArchiveProtocol::listDir: redirection " << redir.url() << endl;
- redirection( redir );
- finished();
- return;
- }
-
- path = TQString::fromLocal8Bit(remoteEncoding()->encode(path));
-
- kdDebug( 7109 ) << "checkNewFile done" << endl;
- const KArchiveDirectory* root = m_archiveFile->directory();
- const KArchiveDirectory* dir;
- if (!path.isEmpty() && path != "/")
- {
- kdDebug(7109) << TQString(TQString("Looking for entry %1").arg(path)) << endl;
- const KArchiveEntry* e = root->entry( path );
- if ( !e )
- {
- error( TDEIO::ERR_DOES_NOT_EXIST, url.prettyURL() );
- return;
- }
- if ( ! e->isDirectory() )
- {
- error( TDEIO::ERR_IS_FILE, url.prettyURL() );
- return;
- }
- dir = (KArchiveDirectory*)e;
- } else {
- dir = root;
- }
-
- TQStringList l = dir->entries();
- totalSize( l.count() );
-
- UDSEntry entry;
- TQStringList::Iterator it = l.begin();
- for( ; it != l.end(); ++it )
- {
- kdDebug(7109) << (*it) << endl;
- const KArchiveEntry* archiveEntry = dir->entry( (*it) );
-
- createUDSEntry( archiveEntry, entry );
-
- listEntry( entry, false );
- }
-
- listEntry( entry, true ); // ready
-
- finished();
-
- kdDebug( 7109 ) << "ArchiveProtocol::listDir done" << endl;
-}
-
-void ArchiveProtocol::stat( const KURL & url )
-{
- TQString path;
- UDSEntry entry;
- TDEIO::Error errorNum;
- if ( !checkNewFile( url, path, errorNum ) )
- {
- // We may be looking at a real directory - this happens
- // when pressing up after being in the root of an archive
- if ( errorNum == TDEIO::ERR_CANNOT_OPEN_FOR_READING )
- {
- // If we cannot open, it might be a problem with the archive header (e.g. unsupported format)
- // Therefore give a more specific error message
- error( TDEIO::ERR_SLAVE_DEFINED,
- i18n( "Could not open the file, probably due to an unsupported file format.\n%1")
- .arg( url.prettyURL() ) );
- return;
- }
- else if ( errorNum != ERR_IS_DIRECTORY )
- {
- // We have any other error
- error( errorNum, url.prettyURL() );
- return;
- }
- // Real directory. Return just enough information for KRun to work
- UDSAtom atom;
- atom.m_uds = TDEIO::UDS_NAME;
- atom.m_str = url.fileName();
- entry.append( atom );
- kdDebug( 7109 ) << "ArchiveProtocol::stat returning name=" << url.fileName() << endl;
-
- KDE_struct_stat buff;
- if ( KDE_stat( TQFile::encodeName( url.path() ), &buff ) == -1 )
- {
- // Should not happen, as the file was already stated by checkNewFile
- error( TDEIO::ERR_COULD_NOT_STAT, url.prettyURL() );
- return;
- }
-
- atom.m_uds = TDEIO::UDS_FILE_TYPE;
- atom.m_long = buff.st_mode & S_IFMT;
- entry.append( atom );
-
- statEntry( entry );
-
- finished();
-
- // And let go of the tar file - for people who want to unmount a cdrom after that
- delete m_archiveFile;
- m_archiveFile = 0L;
- return;
- }
-
- const KArchiveDirectory* root = m_archiveFile->directory();
- const KArchiveEntry* archiveEntry;
- if ( path.isEmpty() )
- {
- path = TQString::fromLatin1( "/" );
- archiveEntry = root;
- } else {
- path = TQString::fromLocal8Bit(remoteEncoding()->encode(path));
- archiveEntry = root->entry( path );
- }
- if ( !archiveEntry )
- {
- error( TDEIO::ERR_DOES_NOT_EXIST, url.prettyURL() );
- return;
- }
-
- createUDSEntry( archiveEntry, entry );
- statEntry( entry );
-
- finished();
-}
-
-void ArchiveProtocol::get( const KURL & url )
-{
- kdDebug( 7109 ) << "ArchiveProtocol::get " << url << endl;
-
- TQString path;
- TDEIO::Error errorNum;
- if ( !checkNewFile( url, path, errorNum ) )
- {
- if ( errorNum == TDEIO::ERR_CANNOT_OPEN_FOR_READING )
- {
- // If we cannot open, it might be a problem with the archive header (e.g. unsupported format)
- // Therefore give a more specific error message
- error( TDEIO::ERR_SLAVE_DEFINED,
- i18n( "Could not open the file, probably due to an unsupported file format.\n%1")
- .arg( url.prettyURL() ) );
- return;
- }
- else
- {
- // We have any other error
- error( errorNum, url.prettyURL() );
- return;
- }
- }
-
- path = TQString::fromLocal8Bit(remoteEncoding()->encode(path));
-
- const KArchiveDirectory* root = m_archiveFile->directory();
- const KArchiveEntry* archiveEntry = root->entry( path );
-
- if ( !archiveEntry )
- {
- error( TDEIO::ERR_DOES_NOT_EXIST, url.prettyURL() );
- return;
- }
- if ( archiveEntry->isDirectory() )
- {
- error( TDEIO::ERR_IS_DIRECTORY, url.prettyURL() );
- return;
- }
- const KArchiveFile* archiveFileEntry = static_cast<const KArchiveFile *>(archiveEntry);
- if ( !archiveEntry->symlink().isEmpty() )
- {
- kdDebug(7109) << "Redirection to " << archiveEntry->symlink() << endl;
- KURL realURL;
- if (archiveEntry->symlink().startsWith("/")) { // absolute path
- realURL.setPath(archiveEntry->symlink() ); // goes out of tar:/, back into file:
- } else {
- realURL = KURL( url, archiveEntry->symlink() );
- }
- kdDebug(7109) << "realURL= " << realURL << endl;
- redirection( realURL );
- finished();
- return;
- }
-
- //kdDebug(7109) << "Preparing to get the archive data" << endl;
-
- /*
- * The easy way would be to get the data by calling archiveFileEntry->data()
- * However this has drawbacks:
- * - the complete file must be read into the memory
- * - errors are skipped, resulting in an empty file
- */
-
- TQIODevice* io = 0;
- // Getting the device is hard, as archiveFileEntry->device() is not virtual!
- if ( url.protocol() == "tar" )
- {
- io = archiveFileEntry->device();
- }
- else if ( url.protocol() == "ar" )
- {
- io = archiveFileEntry->device();
- }
- else if ( url.protocol() == "zip" )
- {
- io = ((KZipFileEntry*) archiveFileEntry)->device();
- }
- else
- {
- // Wrong protocol? Why was this not catched by checkNewFile?
- kdWarning(7109) << "Protocol " << url.protocol() << " not supported by this IOSlave; " << k_funcinfo << endl;
- error( TDEIO::ERR_UNSUPPORTED_PROTOCOL, url.protocol() );
- return;
- }
-
- if (!io)
- {
- error( TDEIO::ERR_SLAVE_DEFINED,
- i18n( "The archive file could not be opened, perhaps because the format is unsupported.\n%1" )
- .arg( url.prettyURL() ) );
- return;
- }
-
- if ( !io->open( IO_ReadOnly ) )
- {
- error( TDEIO::ERR_CANNOT_OPEN_FOR_READING, url.prettyURL() );
- return;
- }
-
- totalSize( archiveFileEntry->size() );
-
- // Size of a TQIODevice read. It must be large enough so that the mime type check will not fail
- const int maxSize = 0x100000; // 1MB
-
- int bufferSize = kMin( maxSize, archiveFileEntry->size() );
- TQByteArray buffer ( bufferSize );
- if ( buffer.isEmpty() && bufferSize > 0 )
- {
- // Something went wrong
- error( TDEIO::ERR_OUT_OF_MEMORY, url.prettyURL() );
- return;
- }
-
- bool firstRead = true;
-
- // How much file do we still have to process?
- int fileSize = archiveFileEntry->size();
- TDEIO::filesize_t processed = 0;
-
- while ( !io->atEnd() && fileSize > 0 )
- {
- if ( !firstRead )
- {
- bufferSize = kMin( maxSize, fileSize );
- buffer.resize( bufferSize, TQGArray::SpeedOptim );
- }
- const TQ_LONG read = io->readBlock( buffer.data(), buffer.size() ); // Avoid to use bufferSize here, in case something went wrong.
- if ( read != bufferSize )
- {
- kdWarning(7109) << "Read " << read << " bytes but expected " << bufferSize << endl;
- error( TDEIO::ERR_COULD_NOT_READ, url.prettyURL() );
- return;
- }
- if ( firstRead )
- {
- // We use the magic one the first data read
- // (As magic detection is about fixed positions, we can be sure that it is enough data.)
- KMimeMagicResult * result = KMimeMagic::self()->findBufferFileType( buffer, path );
- kdDebug(7109) << "Emitting mimetype " << result->mimeType() << endl;
- mimeType( result->mimeType() );
- firstRead = false;
- }
- data( buffer );
- processed += read;
- processedSize( processed );
- fileSize -= bufferSize;
- }
- io->close();
- delete io;
-
- data( TQByteArray() );
-
- finished();
-}
-
-/*
- In case someone wonders how the old filter stuff looked like : :)
-void TARProtocol::slotData(void *_p, int _len)
-{
- switch (m_cmd) {
- case CMD_PUT:
- assert(m_pFilter);
- m_pFilter->send(_p, _len);
- break;
- default:
- abort();
- break;
- }
-}
-
-void TARProtocol::slotDataEnd()
-{
- switch (m_cmd) {
- case CMD_PUT:
- assert(m_pFilter && m_pJob);
- m_pFilter->finish();
- m_pJob->dataEnd();
- m_cmd = CMD_NONE;
- break;
- default:
- abort();
- break;
- }
-}
-
-void TARProtocol::jobData(void *_p, int _len)
-{
- switch (m_cmd) {
- case CMD_GET:
- assert(m_pFilter);
- m_pFilter->send(_p, _len);
- break;
- case CMD_COPY:
- assert(m_pFilter);
- m_pFilter->send(_p, _len);
- break;
- default:
- abort();
- }
-}
-
-void TARProtocol::jobDataEnd()
-{
- switch (m_cmd) {
- case CMD_GET:
- assert(m_pFilter);
- m_pFilter->finish();
- dataEnd();
- break;
- case CMD_COPY:
- assert(m_pFilter);
- m_pFilter->finish();
- m_pJob->dataEnd();
- break;
- default:
- abort();
- }
-}
-
-void TARProtocol::filterData(void *_p, int _len)
-{
-debug("void TARProtocol::filterData");
- switch (m_cmd) {
- case CMD_GET:
- data(_p, _len);
- break;
- case CMD_PUT:
- assert (m_pJob);
- m_pJob->data(_p, _len);
- break;
- case CMD_COPY:
- assert(m_pJob);
- m_pJob->data(_p, _len);
- break;
- default:
- abort();
- }
-}
-*/
-
-// kate: space-indent on; indent-width 4; replace-tabs on;
diff --git a/kioslave/tar/tar.h b/kioslave/tar/tar.h
deleted file mode 100644
index 95887e559..000000000
--- a/kioslave/tar/tar.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This file is part of the KDE libraries
- Copyright (C) 2000 David Faure <[email protected]>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef _TAR_H
-#define _TAR_H
-
-#include <sys/types.h>
-
-#include <kio/global.h>
-#include <kio/slavebase.h>
-
-class ArchiveProtocol : public TDEIO::SlaveBase
-{
-public:
- ArchiveProtocol( const TQCString &pool, const TQCString &app );
- virtual ~ArchiveProtocol();
-
- virtual void listDir( const KURL & url );
- virtual void stat( const KURL & url );
- virtual void get( const KURL & url );
-
-protected:
- void createUDSEntry( const KArchiveEntry * tarEntry, TDEIO::UDSEntry & entry );
-
- /**
- * \brief find, check and open the archive file
- * \param url The URL of the archive
- * \param path Path where the archive really is (returned value)
- * \param errNum KIO error number (undefined if the function returns true)
- * \return true if file was found, false if there was an error
- */
- bool checkNewFile( const KURL & url, TQString & path, TDEIO::Error& errorNum );
-
- KArchive * m_archiveFile;
- TQString m_archiveName;
- time_t m_mtime;
-};
-
-#endif
diff --git a/kioslave/tar/tar.protocol b/kioslave/tar/tar.protocol
deleted file mode 100644
index 096ed249a..000000000
--- a/kioslave/tar/tar.protocol
+++ /dev/null
@@ -1,12 +0,0 @@
-[Protocol]
-exec=kio_tar
-protocol=tar
-mimetype=application/x-tar
-input=filesystem
-output=filesystem
-listing=Name,Type,Size,Date,Access,Owner,Group,Link
-reading=true
-source=true
-DocPath=kioslave/tar.html
-Icon=tar
-Class=:local
diff --git a/kioslave/tar/zip.protocol b/kioslave/tar/zip.protocol
deleted file mode 100644
index a7dffe7ad..000000000
--- a/kioslave/tar/zip.protocol
+++ /dev/null
@@ -1,12 +0,0 @@
-[Protocol]
-exec=kio_tar
-protocol=zip
-mimetype=application/x-zip
-input=filesystem
-output=filesystem
-listing=Name,Type,Size,Date,Access,Owner,Group,Link
-reading=true
-source=true
-DocPath=kioslave/zip.html
-Icon=zip
-Class=:local