Subversion Repositories spk

Rev

Rev 317 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 317 Rev 322
Line 155... Line 155...
155
 
155
 
156
	if ( readtype != CATREAD_JUSTCONTENTS ) {
156
	if ( readtype != CATREAD_JUSTCONTENTS ) {
157
		m_fDatFile.open ( datfile );
157
		m_fDatFile.open ( datfile );
158
 
158
 
159
		// check the file size matches
159
		// check the file size matches
160
		long compare = 0;
160
		size_t compare = 0;
161
		if ( m_fDatFile.startRead() ) {
161
		if ( m_fDatFile.startRead() ) {
162
			compare = m_fDatFile.fileSize();
162
			compare = m_fDatFile.fileSize();
163
			m_fDatFile.close();
163
			m_fDatFile.close();
164
		}
164
		}
165
		
165
		
Line 460... Line 460...
460
		return false;
460
		return false;
461
 
461
 
462
	int err = m_fDatFile.TruncateFile ( f->lOffset, f->lSize );
462
	int err = m_fDatFile.TruncateFile ( f->lOffset, f->lSize );
463
	if ( err == FILEERR_TOSMALL )
463
	if ( err == FILEERR_TOSMALL )
464
	{
464
	{
465
		if ( (int)m_fDatFile.GetFilesize() > this->GetEndOffset() )
465
		if ( (int)m_fDatFile.GetFilesize() > this->endOffset() )
466
			m_fDatFile.TruncateFile( this->GetEndOffset(), m_fDatFile.GetFilesize() - this->GetEndOffset() );
466
			m_fDatFile.TruncateFile( this->endOffset(), m_fDatFile.GetFilesize() - this->endOffset() );
467
	}
467
	}
468
	else if ( err != FILEERR_NONE )
468
	else if ( err != FILEERR_NONE )
469
		return false;
469
		return false;
470
 
470
 
471
	// adjust the file positions
471
	// adjust the file positions
472
	int iOffset = -1;
472
	size_t iOffset = SIZE_MAX;
473
	for (auto itr = _lFiles->cbegin(); itr != _lFiles->cend(); ++itr)
473
	for (auto itr = _lFiles->cbegin(); itr != _lFiles->cend(); ++itr)
474
	{
474
	{
475
		SInCatFile *c = *itr;
475
		SInCatFile *c = *itr;
476
		if (c == f) {
476
		if (c == f) {
477
			iOffset = c->lOffset;
477
			iOffset = c->lOffset;
478
		}
478
		}
479
		else if ( iOffset >= 0 ) {
479
		else if ( iOffset != SIZE_MAX ) {
480
			c->lOffset = iOffset;
480
			c->lOffset = iOffset;
481
			iOffset += c->lSize;
481
			iOffset += c->lSize;
482
		}
482
		}
483
	}
483
	}
484
 
484
 
Line 617... Line 617...
617
 
617
 
618
	bool append = false;
618
	bool append = false;
619
 
619
 
620
	SInCatFile *f = new SInCatFile;
620
	SInCatFile *f = new SInCatFile;
621
	f->sData = 0;
621
	f->sData = 0;
622
	f->lOffset = this->GetEndOffset();
622
	f->lOffset = this->endOffset();
623
	
623
	
624
	bool dofile = true;
624
	bool dofile = true;
625
 
625
 
626
	if ( _lFiles->empty() )	{
626
	if ( _lFiles->empty() )	{
627
		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() no existing files found, wipeing the existing dat file");
627
		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() no existing files found, wipeing the existing dat file");
Line 693... Line 693...
693
		return false;
693
		return false;
694
 
694
 
695
	return appendData(data, size, to, pck);
695
	return appendData(data, size, to, pck);
696
}
696
}
697
 
697
 
698
int CCatFile::GetEndOffset()
698
size_t CCatFile::endOffset() const
699
{
699
{
700
	if ( _lFiles->empty() )
700
	if ( _lFiles->empty() )
701
		return 0;
701
		return 0;
702
	else {
702
	else {
703
		return _lFiles->back()->lOffset + _lFiles->back()->lSize;
703
		return _lFiles->back()->lOffset + _lFiles->back()->lSize;
Line 707... Line 707...
707
size_t CCatFile::GetNumFiles() const 
707
size_t CCatFile::GetNumFiles() const 
708
{ 
708
{ 
709
	return _lFiles->size(); 
709
	return _lFiles->size(); 
710
}
710
}
711
 
711
 
712
SInCatFile *CCatFile::GetFile(unsigned int num) const 
712
SInCatFile *CCatFile::GetFile(size_t num) const 
713
{ 
713
{ 
714
	return (num >= 0 && num < _lFiles->size()) ? _lFiles->at(num) : NULL; 
714
	return (num >= 0 && num < _lFiles->size()) ? _lFiles->at(num) : NULL; 
715
}
715
}
716
 
716
 
717
bool CCatFile::appendData(unsigned char *data, size_t size, const Utils::WString &aTo, bool pck, bool bXor)
717
bool CCatFile::appendData(unsigned char *data, size_t size, const Utils::WString &aTo, bool pck, bool bXor)
Line 1145... Line 1145...
1145
		return false;
1145
		return false;
1146
 
1146
 
1147
	// now check if it exists in this file
1147
	// now check if it exists in this file
1148
	removeFile(file);
1148
	removeFile(file);
1149
 
1149
 
1150
	int offset = (_lFiles->empty()) ? 0 : (_lFiles->back()->lOffset + _lFiles->back()->lSize);
1150
	size_t offset = (_lFiles->empty()) ? 0 : (_lFiles->back()->lOffset + _lFiles->back()->lSize);
1151
	// now write to the new file
1151
	// now write to the new file
1152
	if ( getfile->bDecrypted ) this->DecryptDAT(getfile->sData, getfile->lSize);
1152
	if ( getfile->bDecrypted ) this->DecryptDAT(getfile->sData, getfile->lSize);
1153
	getfile->bDecrypted = false;
1153
	getfile->bDecrypted = false;
1154
	if ( !m_fDatFile.AppendDataToPos((const char *)getfile->sData, getfile->lSize, offset) ) return false;
1154
	if ( !m_fDatFile.AppendDataToPos((const char *)getfile->sData, getfile->lSize, offset) ) return false;
1155
    m_fDatFile.close();
1155
    m_fDatFile.close();