Packer::Packer(DataTool &t):
tool(t),
tmp_file(tempfile()),
- tmp_buf(new IO::Buffered(*tmp_file)),
dir_alloc(0)
{ }
-IO::File *Packer::tempfile()
+IO::BufferedFile *Packer::tempfile()
{
FS::Path tmpdir;
const char *tmp_env = getenv("TMPDIR");
try
{
FS::Path filename = tmpdir/format("mspdatatool.%d", i);
- IO::File *file = new IO::File(filename.str(), IO::M_RDWR, IO::File::C_NEW);
+ IO::BufferedFile *file = new IO::BufferedFile(filename.str(), IO::M_RDWR, IO::File::C_NEW);
FS::unlink(filename.str());
return file;
}
Packer::~Packer()
{
- delete tmp_buf;
delete tmp_file;
}
if(raw)
transfer_raw(in, *tmp_file);
else
- {
- transfer_datafile(in, fn, *tmp_buf, objects);
- tmp_buf->flush();
- }
+ transfer_datafile(in, fn, *tmp_file, objects);
unsigned length = tmp_file->tell()-offset;
IO::File out(fn, IO::M_WRITE);
out.write(&dir_buffer[0], base_offset);
tmp_file->seek(0, IO::S_BEG);
+ unsigned bufsize = 1048576;
+ char *buf = new char[bufsize];
while(!tmp_file->eof())
{
- char buf[16384];
- unsigned len = tmp_file->read(buf, sizeof(buf));
+ unsigned len = tmp_file->read(buf, bufsize);
if(!len)
break;
out.write(buf, len);
}
+ delete[] buf;
}