Fix iso kioslave not parsing large images properly

(cherry picked from commit b4bba7b553)
v3.5.13-sru
Timothy Pearson 13 years ago committed by Slávek Banko
parent e9814aea9f
commit eaee388f8e

@ -188,7 +188,7 @@ KIso::~KIso()
} }
/* callback function for libisofs */ /* 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<KIso*> (udata) )->device(); TQIODevice* dev = ( static_cast<KIso*> (udata) )->device();
@ -212,7 +212,7 @@ static int mycallb(struct iso_directory_record *idr,void *udata) {
bool special=false; bool special=false;
KArchiveEntry *entry=NULL,*oldentry=NULL; KArchiveEntry *entry=NULL,*oldentry=NULL;
char z_algo[2],z_params[2]; 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 ((idr->flags[0] & 1) && !iso->showhidden) return 0;
if (iso->level) { 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) { void KIso::addBoot(struct el_torito_boot_descriptor* bootdesc) {
int i,size; int i;
long long size;
boot_head boot; boot_head boot;
boot_entry *be; boot_entry *be;
TQString path; TQString path;

@ -20,7 +20,7 @@
KIsoFile::KIsoFile( KArchive* archive, const TQString& name, int access, KIsoFile::KIsoFile( KArchive* archive, const TQString& name, int access,
int date, int adate,int cdate, const TQString& user, const TQString& group, 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) { 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(){ 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_algo[0]=algo[0];m_algo[1]=algo[1];
m_parms[0]=parms[0];m_parms[1]=parms[1]; m_parms[0]=parms[0];m_parms[1]=parms[1];
m_realsize=realsize; m_realsize=realsize;

@ -29,9 +29,9 @@ class KIsoFile : public KArchiveFile {
public: public:
KIsoFile( KArchive* archive, const TQString& name, int access, int date, KIsoFile( KArchive* archive, const TQString& name, int access, int date,
int adate,int cdate, const TQString& user, const TQString& group, 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(); ~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 adate() const { return m_adate; }
int cdate() const { return m_cdate; } int cdate() const { return m_cdate; }
long long realsize() const { return m_realsize; } long long realsize() const { return m_realsize; }

@ -122,8 +122,8 @@ void FreeBootTable(boot_head *boot) {
boot->defentry=NULL; boot->defentry=NULL;
} }
int BootImageSize(int media,int len) { int BootImageSize(int media,long len) {
int ret; long long ret;
switch(media & 0xf) { switch(media & 0xf) {
case 0: case 0:
@ -158,7 +158,7 @@ static boot_entry *CreateBootEntry(char *be) {
return entry; 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; char buf[2048], *c, *be;
int i,end=0; int i,end=0;
@ -221,7 +221,7 @@ err:
/** /**
* Creates the linked list of the volume descriptors * 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; int i;
struct iso_volume_descriptor buf; struct iso_volume_descriptor buf;
@ -577,10 +577,10 @@ int level=0,joliet=0,dirs,files;
iconv_t iconv_d; iconv_t iconv_d;
int fd; int fd;
int readf(char *buf, int start, int len,void *udata) { int readf(char *buf, long start, long len,void *udata) {
int ret; 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); ret=read(fd, buf, len << 11);
if (ret<0) return ret; if (ret<0) return ret;
return (ret >> 11); return (ret >> 11);

@ -50,7 +50,7 @@ typedef struct _rr_entry {
int re; /* relocated */ int re; /* relocated */
char z_algo[2]; /* zizofs algorithm */ char z_algo[2]; /* zizofs algorithm */
char z_params[2]; /* zizofs parameters */ char z_params[2]; /* zizofs parameters */
int z_size; /* zizofs real_size */ long z_size; /* zizofs real_size */
} rr_entry; } rr_entry;
typedef struct _iso_vol_desc { 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' * 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 * ProcessDir uses this callback
@ -107,7 +107,7 @@ time_t isodate_84261(char * p, int hs);
* If the function fails, returns NULL * If the function fails, returns NULL
* Don't forget to call FreeISO9660 after using the volume descriptor list! * 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 * 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) * 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, * 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! * 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 #ifdef __cplusplus
} //extern "C" } //extern "C"

Loading…
Cancel
Save