| Line 123... | Line 123... | 
          
            | 123 | 	try {
 | 123 | 	try {
 | 
          
            | 124 | 		if ( m_sData ) delete [] m_sData;
 | 124 | 		if ( m_sData ) delete [] m_sData;
 | 
          
            | 125 | 		m_sData = new unsigned char[size + 1];
 | 125 | 		m_sData = new unsigned char[size + 1];
 | 
          
            | 126 | 	}
 | 126 | 	}
 | 
          
            | 127 | 	catch (std::exception &e) {
 | 127 | 	catch (std::exception &e) {
 | 
          
            | 128 | 		CLog::logf(CLog::Log_IO, 2, "Memory Exception error, unable to alloc enough memory to store file data, %d (%s)", size + 1, e.what());
 | 128 | 		CLog::logf(CLog::Log_IO, 2, L"Memory Exception error, unable to alloc enough memory to store file data, %d (%hs)", size + 1, e.what());
 | 
          
            | 129 | 		return CATERR_MALLOC;
 | 129 | 		return CATERR_MALLOC;
 | 
          
            | 130 | 	}
 | 130 | 	}
 | 
          
            | 131 |  
 | 131 |  
 | 
          
            | 132 | 	m_lSize = size;
 | 132 | 	m_lSize = size;
 | 
          
            | 133 | 	try {
 | 133 | 	try {
 | 
          
            | 134 | 		File.read(m_sData, m_lSize);
 | 134 | 		File.read(m_sData, m_lSize);
 | 
          
            | 135 | 	} catch (std::exception &e) {
 | 135 | 	} catch (std::exception &e) {
 | 
          
            | 136 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::Open() unable to read from cat file, %s", e.what());
 | 136 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::Open() unable to read from cat file, %hs", e.what());
 | 
          
            | 137 | 		RemoveData ();
 | 137 | 		RemoveData ();
 | 
          
            | 138 | 		File.close();
 | 138 | 		File.close();
 | 
          
            | 139 | 		return CATERR_READCAT;
 | 139 | 		return CATERR_READCAT;
 | 
          
            | 140 | 	}
 | 140 | 	}
 | 
          
            | 141 |  
 | 141 |  
 | 
          
            | Line 213... | Line 213... | 
          
            | 213 |  
 | 213 |  
 | 
          
            | 214 | 			try {
 | 214 | 			try {
 | 
          
            | 215 | 				c->sData = new unsigned char[c->lSize + 1];
 | 215 | 				c->sData = new unsigned char[c->lSize + 1];
 | 
          
            | 216 | 			}
 | 216 | 			}
 | 
          
            | 217 | 			catch (std::exception &e) {
 | 217 | 			catch (std::exception &e) {
 | 
          
            | 218 | 				CLog::logf(CLog::Log_IO, 2, "CCatFile::LoadDatFile() unable to malloc data storage: %s, %d (%s)", c->sFile.c_str(), c->lSize, e.what());
 | 218 | 				CLog::logf(CLog::Log_IO, 2, L"CCatFile::LoadDatFile() unable to malloc data storage: %s, %d (%hs)", c->sFile.c_str(), c->lSize, e.what());
 | 
          
            | 219 | 				continue;
 | 219 | 				continue;
 | 
          
            | 220 | 			}
 | 220 | 			}
 | 
          
            | 221 |  
 | 221 |  
 | 
          
            | 222 | 			try {
 | 222 | 			try {
 | 
          
            | 223 | 				m_fDatFile.read(c->sData, c->lSize);
 | 223 | 				m_fDatFile.read(c->sData, c->lSize);
 | 
          
            | 224 | 			}
 | 224 | 			}
 | 
          
            | 225 | 			catch(std::exception &e) {
 | 225 | 			catch(std::exception &e) {
 | 
          
            | 226 | 				CLog::logf(CLog::Log_IO, 2, "CCatFile::LoadDatFile() unable to read file data: %s, %d (%s)", c->sFile.c_str(), c->lSize, e.what());
 | 226 | 				CLog::logf(CLog::Log_IO, 2, L"CCatFile::LoadDatFile() unable to read file data: %s, %d (%hs)", c->sFile.c_str(), c->lSize, e.what());
 | 
          
            | 227 | 				continue;
 | 227 | 				continue;
 | 
          
            | 228 | 			}
 | 228 | 			}
 | 
          
            | 229 | 			c->bDecrypted = false;
 | 229 | 			c->bDecrypted = false;
 | 
          
            | 230 | 			this->DecryptDAT(c);
 | 230 | 			this->DecryptDAT(c);
 | 
          
            | 231 | 		}
 | 231 | 		}
 | 
          
            | Line 519... | Line 519... | 
          
            | 519 |  
 | 519 |  
 | 
          
            | 520 | 		bool ret = m_fCatFile.write(data, cat.length());
 | 520 | 		bool ret = m_fCatFile.write(data, cat.length());
 | 
          
            | 521 | 		delete []data;
 | 521 | 		delete []data;
 | 
          
            | 522 | 	}
 | 522 | 	}
 | 
          
            | 523 | 	catch(std::exception &e) {
 | 523 | 	catch(std::exception &e) {
 | 
          
            | 524 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::WriteCatFile() unable to malloc, %d (%s)", len + 1, e.what());
 | 524 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::WriteCatFile() unable to malloc, %d (%hs)", len + 1, e.what());
 | 
          
            | 525 | 		return false;
 | 525 | 		return false;
 | 
          
            | 526 | 	}
 | 526 | 	}
 | 
          
            | 527 |  
 | 527 |  
 | 
          
            | 528 | 	m_fCatFile.close();
 | 528 | 	m_fCatFile.close();
 | 
          
            | 529 | 	m_bCatChanged = false;
 | 529 | 	m_bCatChanged = false;
 | 
          
            | Line 580... | Line 580... | 
          
            | 580 | 	return f;
 | 580 | 	return f;
 | 
          
            | 581 | }
 | 581 | }
 | 
          
            | 582 |  
 | 582 |  
 | 
          
            | 583 | bool CCatFile::appendFile(const Utils::WString &filename, const Utils::WString &sTo, bool pck, bool bXor, Utils::WString *sChangeTo)
 | 583 | bool CCatFile::appendFile(const Utils::WString &filename, const Utils::WString &sTo, bool pck, bool bXor, Utils::WString *sChangeTo)
 | 
          
            | 584 | {
 | 584 | {
 | 
          
            | 585 | 	CLog::logf(CLog::Log_IO, 1, "CCatFile::AppendFile() Adding file, %s, into cat file, %s::%s [PCK:%s XOR:%s]", filename.c_str(), this->m_fCatFile.filename().c_str(), sTo.c_str(), (pck) ? "Yes" : "No", (bXor) ? "Yes" : "No");
 | 585 | 	CLog::logf(CLog::Log_IO, 1, L"CCatFile::AppendFile() Adding file, %s, into cat file, %s::%s [PCK:%s XOR:%s]", filename.c_str(), this->m_fCatFile.filename().c_str(), sTo.c_str(), (pck) ? L"Yes" : L"No", (bXor) ? L"Yes" : L"No");
 | 
          
            | 586 |  
 | 586 |  
 | 
          
            | 587 | 	if ( filename.isin (L"::" ) ) return writeFromCat(filename.token(L"::", 1), filename.token(L"::", 2));
 | 587 | 	if ( filename.isin (L"::" ) ) return writeFromCat(filename.token(L"::", 1), filename.token(L"::", 2));
 | 
          
            | 588 | 	if ( (!m_bCreate) && (!m_fDatFile.exists ()) ) {
 | 588 | 	if ( (!m_bCreate) && (!m_fDatFile.exists ()) ) {
 | 
          
            | 589 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() Cat File: %s, doesn't exist, quitting...", m_fCatFile.fullFilename().c_str());
 | 589 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() Cat File: %s, doesn't exist, quitting...", m_fCatFile.fullFilename().c_str());
 | 
          
            | 590 | 		return false;
 | 590 | 		return false;
 | 
          
            | 591 | 	}
 | 591 | 	}
 | 
          
            | 592 | 	Utils::WString to = sTo;
 | 592 | 	Utils::WString to = sTo;
 | 
          
            | 593 | 	if ( !_sAddonDir.empty() && CCatFile::IsAddonDir(to) ) {
 | 593 | 	if ( !_sAddonDir.empty() && CCatFile::IsAddonDir(to) ) {
 | 
          
            | 594 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() changing destination to included addon fir, %s => %s", to, _sAddonDir + L"/" + to);
 | 594 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() changing destination to included addon fir, %s => %s", to, _sAddonDir + L"/" + to);
 | 
          
            | 595 | 		to = _sAddonDir + L"\\" + to;
 | 595 | 		to = _sAddonDir + L"\\" + to;
 | 
          
            | 596 | 	}
 | 596 | 	}
 | 
          
            | 597 |  
 | 597 |  
 | 
          
            | 598 | 	// change the file extension and remove the file again
 | 598 | 	// change the file extension and remove the file again
 | 
          
            | 599 | 	if ( pck && checkExtensionPck(filename) ) {
 | 599 | 	if ( pck && checkExtensionPck(filename) ) {
 | 
          
            | 600 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() changing file extension for packed file, %s => %s", to.c_str(), PckChangeExtension(to).c_str());
 | 600 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() changing file extension for packed file, %s => %s", to.c_str(), PckChangeExtension(to).c_str());
 | 
          
            | 601 | 		to = PckChangeExtension(to);
 | 601 | 		to = PckChangeExtension(to);
 | 
          
            | 602 | 	}
 | 602 | 	}
 | 
          
            | 603 | 	if ( sChangeTo ) *sChangeTo = to;
 | 603 | 	if ( sChangeTo ) *sChangeTo = to;
 | 
          
            | 604 |  
 | 604 |  
 | 
          
            | 605 | 	if ( !_lFiles->empty() ) {
 | 605 | 	if ( !_lFiles->empty() ) {
 | 
          
            | 606 | 		SInCatFile *checkf = findData(to);
 | 606 | 		SInCatFile *checkf = findData(to);
 | 
          
            | 607 | 		if ( checkf ) {
 | 607 | 		if ( checkf ) {
 | 
          
            | 608 | 			CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() removing existing filechanging file extension for packed file, %s => %s", to.c_str(), PckChangeExtension(to).c_str());
 | 608 | 			CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() removing existing filechanging file extension for packed file, %s => %s", to.c_str(), PckChangeExtension(to).c_str());
 | 
          
            | 609 | 			if ( !removeFile(checkf) ) {
 | 609 | 			if ( !removeFile(checkf) ) {
 | 
          
            | 610 | 				CLog::logf(CLog::Log_IO, 1, "CCatFile::AppendFile() unable to remove existing file, quitting...");
 | 610 | 				CLog::logf(CLog::Log_IO, 1, L"CCatFile::AppendFile() unable to remove existing file, quitting...");
 | 
          
            | 611 | 				return false;
 | 611 | 				return false;
 | 
          
            | 612 | 			}
 | 612 | 			}
 | 
          
            | 613 | 		}
 | 613 | 		}
 | 
          
            | 614 | 	}
 | 614 | 	}
 | 
          
            | 615 |  
 | 615 |  
 | 
          
            | Line 620... | Line 620... | 
          
            | 620 | 	f->lOffset = this->GetEndOffset();
 | 620 | 	f->lOffset = this->GetEndOffset();
 | 
          
            | 621 | 	
 | 621 | 	
 | 
          
            | 622 | 	bool dofile = true;
 | 622 | 	bool dofile = true;
 | 
          
            | 623 |  
 | 623 |  
 | 
          
            | 624 | 	if ( _lFiles->empty() )	{
 | 624 | 	if ( _lFiles->empty() )	{
 | 
          
            | 625 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() no existing files found, wipeing the existing dat file");
 | 625 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() no existing files found, wipeing the existing dat file");
 | 
          
            | 626 | 		m_fDatFile.WipeFile();
 | 626 | 		m_fDatFile.WipeFile();
 | 
          
            | 627 | 	}
 | 627 | 	}
 | 
          
            | 628 |  
 | 628 |  
 | 
          
            | 629 | 	CFileIO File(filename);
 | 629 | 	CFileIO File(filename);
 | 
          
            | 630 | 	if ( !File.startRead() ) {
 | 630 | 	if ( !File.startRead() ) {
 | 
          
            | 631 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() unable to open file, %s, for reading", filename.c_str());
 | 631 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() unable to open file, %s, for reading", filename.c_str());
 | 
          
            | 632 | 		return false;
 | 632 | 		return false;
 | 
          
            | 633 | 	}
 | 633 | 	}
 | 
          
            | 634 | 	
 | 634 | 	
 | 
          
            | 635 | 	CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() reading file data, %s:%d", filename.c_str(), File.fileSize());
 | 635 | 	CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() reading file data, %s:%d", filename.c_str(), File.fileSize());
 | 
          
            | 636 | 	unsigned char *data = File.readAll();
 | 636 | 	unsigned char *data = File.readAll();
 | 
          
            | 637 | 	File.close();
 | 637 | 	File.close();
 | 
          
            | 638 |  
 | 638 |  
 | 
          
            | 639 | 	// check if we need to pack the file
 | 639 | 	// check if we need to pack the file
 | 
          
            | 640 | 	int iFileType = this->_checkFiletype(data, 3);
 | 640 | 	int iFileType = this->_checkFiletype(data, 3);
 | 
          
            | 641 | 	CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() preparing to append file data, Type=%d", iFileType);
 | 641 | 	CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() preparing to append file data, Type=%d", iFileType);
 | 
          
            | 642 | 	if ( iFileType == FILETYPE_PLAIN && CheckPackedExtension(to) ) {
 | 642 | 	if ( iFileType == FILETYPE_PLAIN && CheckPackedExtension(to) ) {
 | 
          
            | 643 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() plain text file needs to packed");
 | 643 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() plain text file needs to packed");
 | 
          
            | 644 | 		size_t newsize = 0;
 | 644 | 		size_t newsize = 0;
 | 
          
            | 645 | 		unsigned char *newdata = PCKData(data, File.fileSize(), &newsize, bXor);
 | 645 | 		unsigned char *newdata = PCKData(data, File.fileSize(), &newsize, bXor);
 | 
          
            | 646 | 		CLog::logf(CLog::Log_IO, 1, "CCatFile::AppendFile() file has been packed, %d => %d", File.fileSize(), newsize);
 | 646 | 		CLog::logf(CLog::Log_IO, 1, L"CCatFile::AppendFile() file has been packed, %d => %d", File.fileSize(), newsize);
 | 
          
            | 647 |  
 | 647 |  
 | 
          
            | 648 | 		f->lSize = newsize;
 | 648 | 		f->lSize = newsize;
 | 
          
            | 649 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() Decrypting data");
 | 649 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() Decrypting data");
 | 
          
            | 650 | 		this->DecryptDAT(newdata, f->lSize);
 | 650 | 		this->DecryptDAT(newdata, f->lSize);
 | 
          
            | 651 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() appending data to Dat file, Offset:%d", f->lOffset);
 | 651 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() appending data to Dat file, Offset:%d", f->lOffset);
 | 
          
            | 652 | 		append = m_fDatFile.AppendDataToPos ( (const char *)newdata, newsize, f->lOffset );
 | 652 | 		append = m_fDatFile.AppendDataToPos ( (const char *)newdata, newsize, f->lOffset );
 | 
          
            | 653 |  
 | 653 |  
 | 
          
            | 654 | 		delete [] newdata;
 | 654 | 		delete [] newdata;
 | 
          
            | 655 | 	}
 | 655 | 	}
 | 
          
            | 656 | 	else  {
 | 656 | 	else  {
 | 
          
            | 657 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() Decrypting data");
 | 657 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() Decrypting data");
 | 
          
            | 658 | 		this->DecryptDAT(data, File.fileSize());
 | 658 | 		this->DecryptDAT(data, File.fileSize());
 | 
          
            | 659 | 		f->lSize = File.fileSize();
 | 659 | 		f->lSize = File.fileSize();
 | 
          
            | 660 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() appending data to Dat file, Offset:%d", f->lOffset);
 | 660 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() appending data to Dat file, Offset:%d", f->lOffset);
 | 
          
            | 661 | 		append = m_fDatFile.AppendDataToPos ( (const char *)data, f->lSize, f->lOffset );
 | 661 | 		append = m_fDatFile.AppendDataToPos ( (const char *)data, f->lSize, f->lOffset );
 | 
          
            | 662 | 	}
 | 662 | 	}
 | 
          
            | 663 |  
 | 663 |  
 | 
          
            | 664 | 	CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() cleaning up memory");
 | 664 | 	CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() cleaning up memory");
 | 
          
            | 665 | 	delete [] data;
 | 665 | 	delete [] data;
 | 
          
            | 666 |  
 | 666 |  
 | 
          
            | 667 | 	m_fDatFile.close();
 | 667 | 	m_fDatFile.close();
 | 
          
            | 668 |  
 | 668 |  
 | 
          
            | 669 | 	if ( append ) {
 | 669 | 	if ( append ) {
 | 
          
            | 670 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() append complete, adding file into cat list");
 | 670 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() append complete, adding file into cat list");
 | 
          
            | 671 | 		m_bCreate = false;
 | 671 | 		m_bCreate = false;
 | 
          
            | 672 | 		f->sFile = to;
 | 672 | 		f->sFile = to;
 | 
          
            | 673 | 		_lFiles->push_back(f);
 | 673 | 		_lFiles->push_back(f);
 | 
          
            | 674 | 		CLog::logf(CLog::Log_IO, 3, "CCatFile::AppendFile() writing the new cat file");
 | 674 | 		CLog::logf(CLog::Log_IO, 3, L"CCatFile::AppendFile() writing the new cat file");
 | 
          
            | 675 | 		m_bCatChanged = true;
 | 675 | 		m_bCatChanged = true;
 | 
          
            | 676 | 	}
 | 676 | 	}
 | 
          
            | 677 | 	else {
 | 677 | 	else {
 | 
          
            | 678 | 		CLog::logf(CLog::Log_IO, 2, "CCatFile::AppendFile() appending failed, cleaning up file data");
 | 678 | 		CLog::logf(CLog::Log_IO, 2, L"CCatFile::AppendFile() appending failed, cleaning up file data");
 | 
          
            | 679 | 		delete f;
 | 679 | 		delete f;
 | 
          
            | 680 | 	}
 | 680 | 	}
 | 
          
            | 681 |  
 | 681 |  
 | 
          
            | 682 | 	CLog::logf(CLog::Log_IO, 4, "CCatFile::AppendFile() function complete");
 | 682 | 	CLog::logf(CLog::Log_IO, 4, L"CCatFile::AppendFile() function complete");
 | 
          
            | 683 |  
 | 683 |  
 | 
          
            | 684 | 	return append;
 | 684 | 	return append;
 | 
          
            | 685 | }
 | 685 | }
 | 
          
            | 686 |  
 | 686 |  
 | 
          
            | 687 | bool CCatFile::addData(const Utils::WString &catfile, unsigned char *data, size_t size, const Utils::WString &to, bool pck, bool create)
 | 687 | bool CCatFile::addData(const Utils::WString &catfile, unsigned char *data, size_t size, const Utils::WString &to, bool pck, bool create)
 |