From eaee388f8e5ed0648a2dcd10654d77db3ec39720 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 30 Jun 2012 22:31:06 -0500 Subject: [PATCH] Fix iso kioslave not parsing large images properly (cherry picked from commit b4bba7b553995a6b13214dbbabe18ff311007eea) --- kioslave/iso/kiso.cpp | 7 ++++--- kioslave/iso/kisofile.cpp | 4 ++-- kioslave/iso/kisofile.h | 4 ++-- kioslave/iso/libisofs/isofs.c | 12 ++++++------ kioslave/iso/libisofs/isofs.h | 10 +++++----- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/kioslave/iso/kiso.cpp b/kioslave/iso/kiso.cpp index 1b052f6ab..4acb328aa 100644 --- a/kioslave/iso/kiso.cpp +++ b/kioslave/iso/kiso.cpp @@ -188,7 +188,7 @@ KIso::~KIso() } /* callback function for libisofs */ -static int readf(char *buf, int start, int len,void *udata) { +static int readf(char *buf, long start, long len,void *udata) { TQIODevice* dev = ( static_cast (udata) )->device(); @@ -212,7 +212,7 @@ static int mycallb(struct iso_directory_record *idr,void *udata) { bool special=false; KArchiveEntry *entry=NULL,*oldentry=NULL; char z_algo[2],z_params[2]; - int z_size=0; + long long z_size=0; if ((idr->flags[0] & 1) && !iso->showhidden) return 0; if (iso->level) { @@ -289,7 +289,8 @@ static int mycallb(struct iso_directory_record *idr,void *udata) { void KIso::addBoot(struct el_torito_boot_descriptor* bootdesc) { - int i,size; + int i; + long long size; boot_head boot; boot_entry *be; TQString path; diff --git a/kioslave/iso/kisofile.cpp b/kioslave/iso/kisofile.cpp index afac16b74..ffae0d3bc 100644 --- a/kioslave/iso/kisofile.cpp +++ b/kioslave/iso/kisofile.cpp @@ -20,7 +20,7 @@ KIsoFile::KIsoFile( KArchive* archive, const TQString& name, int access, int date, int adate,int cdate, const TQString& user, const TQString& group, - const TQString& symlink,int pos, int size) : + const TQString& symlink,long long pos, long long size) : KArchiveFile(archive, name, access, date, user, group, symlink, pos, size) { @@ -32,7 +32,7 @@ KIsoFile::KIsoFile( KArchive* archive, const TQString& name, int access, KIsoFile::~KIsoFile(){ } -void KIsoFile::setZF(char algo[2],char parms[2],int realsize) { +void KIsoFile::setZF(char algo[2],char parms[2],long long realsize) { m_algo[0]=algo[0];m_algo[1]=algo[1]; m_parms[0]=parms[0];m_parms[1]=parms[1]; m_realsize=realsize; diff --git a/kioslave/iso/kisofile.h b/kioslave/iso/kisofile.h index 193509cf6..696a8c191 100644 --- a/kioslave/iso/kisofile.h +++ b/kioslave/iso/kisofile.h @@ -29,9 +29,9 @@ class KIsoFile : public KArchiveFile { public: KIsoFile( KArchive* archive, const TQString& name, int access, int date, int adate,int cdate, const TQString& user, const TQString& group, - const TQString& symlink, int pos, int size); + const TQString& symlink, long long pos, long long size); ~KIsoFile(); - void setZF(char algo[2],char parms[2],int realsize); + void setZF(char algo[2],char parms[2],long long realsize); int adate() const { return m_adate; } int cdate() const { return m_cdate; } long long realsize() const { return m_realsize; } diff --git a/kioslave/iso/libisofs/isofs.c b/kioslave/iso/libisofs/isofs.c index ab13d9eb9..e59945026 100644 --- a/kioslave/iso/libisofs/isofs.c +++ b/kioslave/iso/libisofs/isofs.c @@ -122,8 +122,8 @@ void FreeBootTable(boot_head *boot) { boot->defentry=NULL; } -int BootImageSize(int media,int len) { - int ret; +int BootImageSize(int media,long len) { + long long ret; switch(media & 0xf) { case 0: @@ -158,7 +158,7 @@ static boot_entry *CreateBootEntry(char *be) { return entry; } -int ReadBootTable(readfunc *read,int sector, boot_head *head, void *udata) { +int ReadBootTable(readfunc *read,long sector, boot_head *head, void *udata) { char buf[2048], *c, *be; int i,end=0; @@ -221,7 +221,7 @@ err: /** * Creates the linked list of the volume descriptors */ -iso_vol_desc *ReadISO9660(readfunc *read,int sector,void *udata) { +iso_vol_desc *ReadISO9660(readfunc *read,long sector,void *udata) { int i; struct iso_volume_descriptor buf; @@ -577,10 +577,10 @@ int level=0,joliet=0,dirs,files; iconv_t iconv_d; int fd; -int readf(char *buf, int start, int len,void *udata) { +int readf(char *buf, long start, long len,void *udata) { int ret; - if ((ret=lseek(fd, start << 11, SEEK_SET))<0) return ret; + if ((ret=lseek64(fd, start << 11, SEEK_SET))<0) return ret; ret=read(fd, buf, len << 11); if (ret<0) return ret; return (ret >> 11); diff --git a/kioslave/iso/libisofs/isofs.h b/kioslave/iso/libisofs/isofs.h index 52190e673..b8971a4c6 100644 --- a/kioslave/iso/libisofs/isofs.h +++ b/kioslave/iso/libisofs/isofs.h @@ -50,7 +50,7 @@ typedef struct _rr_entry { int re; /* relocated */ char z_algo[2]; /* zizofs algorithm */ char z_params[2]; /* zizofs parameters */ - int z_size; /* zizofs real_size */ + long z_size; /* zizofs real_size */ } rr_entry; typedef struct _iso_vol_desc { @@ -78,7 +78,7 @@ typedef struct _boot_head { /** * this callback function needs to read 'len' sectors from 'start' into 'buf' */ -typedef int readfunc(char *buf,int start, int len,void *); +typedef int readfunc(char *buf,long start, long len,void *); /** * ProcessDir uses this callback @@ -107,7 +107,7 @@ time_t isodate_84261(char * p, int hs); * If the function fails, returns NULL * Don't forget to call FreeISO9660 after using the volume descriptor list! */ -iso_vol_desc *ReadISO9660(readfunc *read,int sector,void *udata); +iso_vol_desc *ReadISO9660(readfunc *read,long sector,void *udata); /** * Frees the linked list of volume descriptors @@ -140,7 +140,7 @@ int JolietLevel(struct iso_volume_descriptor *ivd); /** * Returns the size of the boot image (in 512 byte sectors) */ -int BootImageSize(int media,int len); +int BootImageSize(int media,long len); /** * Frees the boot catalog entries in 'boot'. If you ever called ReadBootTable, @@ -151,7 +151,7 @@ void FreeBootTable(boot_head *boot); /** * Reads the boot catalog into 'head'. Don't forget to call FreeBootTable! */ -int ReadBootTable(readfunc *read,int sector, boot_head *head, void *udata); +int ReadBootTable(readfunc *read,long sector, boot_head *head, void *udata); #ifdef __cplusplus } //extern "C"