--EDIT-- realized it had to do with my char[] size. thanks.
I am trying to create a PAKer and having issues with my variables suddenly changing out of no where. As soon as i call strcpy in the cody below the packHeader suddenly gets filled up with the name of the file being strcpy'ed and very large number for its data.
im clueless as to what is going on with my data...
Code:
///////////////////////////////////////////////////////////////////////
// Function to pack a single file into an opened pak.
//
// Input: file - filepath of file to pack
///////////////////////////////////////////////////////////////////////
bool PAKUtility::Pack( const char *file )
{
m_newFile.open(file, std::ios_base::in | std::ios_base::binary);
if(!m_newFile.is_open())
return false;
const int READ_SIZE = 1024;
char data[READ_SIZE];
// read existing main header
m_PakFile.seekg(0, std::ios_base::beg);
m_PakFile.seekp(0, std::ios_base::beg);
PAKHEADER packHeader;
m_PakFile.read((char*)&packHeader, sizeof(PAKHEADER));
// build & write new header for new file
m_newFile.seekg(0, std::ios_base::end);
FILEHEADER fh;
strcpy(fh.name, file);
fh.fileOffset = packHeader.dirOffset;
fh.fileLength = m_newFile.tellg();
m_newFile.seekg(0, std::ios_base::beg);
m_PakFile.seekg(packHeader.dirOffset, std::ios_base::beg);
FILEHEADER* fHeaders = NULL;
int numHeaders = (packHeader.dirSize >> 6);
if(numHeaders > 0)
{
fHeaders = new FILEHEADER[numHeaders];
for(int i = 0; i < numHeaders; i++)
m_PakFile.read((char*)&fHeaders[i], sizeof(FILEHEADER));
}
// append the new file in chunks
m_newFile.seekg(0, std::ios_base::beg);
m_PakFile.seekp(packHeader.dirOffset, std::ios_base::beg);
while (m_newFile.good())
{
m_newFile.read(data, READ_SIZE);
m_PakFile.write(data, m_newFile.gcount());
}
if(numHeaders > 0)
for(int i = 0; i < numHeaders; i++)
m_PakFile.write((char*)&fHeaders[i], sizeof(FILEHEADER));
m_PakFile.write((char*)&fh, sizeof(FILEHEADER));
// Update header
packHeader.dirOffset += fh.fileLength;
packHeader.dirSize += 64;
m_PakFile.seekp(0, std::ios_base::beg);
m_PakFile.write((char*)&packHeader, sizeof(PAKHEADER));
m_newFile.close();
m_newFile.clear();
CListBox* pList = (CListBox*)theApp.GetMainWnd()->GetDlgItem(IDC_LIST2);
int counter = pList->GetCount();
for(int i = counter - 1; i > 0; i--)
pList->DeleteString(i);
for(int i = 0; i < numHeaders; i++)
pList->AddString(fHeaders[i].name);
delete [] fHeaders;
return true;
}