fix VirtualFile::read_file() for text files

This commit is contained in:
David Rose 2010-08-05 22:04:14 +00:00
parent 3b3937270f
commit 834ff90f7c
2 changed files with 10 additions and 2 deletions

View File

@ -74,7 +74,7 @@ read_file(const Filename &file, bool do_uncompress,
}
off_t file_size = get_file_size(file, in);
if (file_size != 0) {
if (file_size > 0) {
result.reserve((size_t)file_size);
}

View File

@ -127,17 +127,25 @@ open_read_file(const Filename &file) const {
// the size.
////////////////////////////////////////////////////////////////////
off_t VirtualFileMountSystem::
get_file_size(const Filename &, istream *stream) const {
get_file_size(const Filename &file, istream *stream) const {
// First, save the original stream position.
streampos orig = stream->tellg();
// Seek to the end and get the stream position there.
stream->seekg(0, ios::end);
if (stream->fail()) {
// Seeking not supported.
stream->clear();
return get_file_size(file);
}
streampos size = stream->tellg();
// Then return to the original point.
stream->seekg(orig, ios::beg);
// Make sure there are no error flags set as a result of the seek.
stream->clear();
return size;
}