Hello,
During the implementation of a TARFILE module based
on Boost.Iostream, I’ve faced a problem during reading operation of a boost::iostream::filtering_stream<>
with a GZip codec. To illustrate it, you will find hereafter a small code
snippet that reproduces my problem:
namespace io = boost::iostreams ;
namespace fs = boost::filesystem ;
const fs::path test_file("test.txt.gz")
;
const std::string s("Test..................")
;
{
io::filtering_stream<io::output>
ofilter ;
ofilter.push(io::gzip_compressor())
;
ofilter.push(io::file_descriptor_sink(
test_file.external_file_string()
, std::ios::binary))
;
ofilter << s ;
}
{
io::filtering_stream<io::input>
ifilter ;
ifilter.push(io::gzip_decompressor())
;
ifilter.push(io::file_descriptor_source(
test_file.external_file_string()
, std::ios::binary))
;
std::string rs ;
ifilter >> rs ; //
<- Here process is blocked in file_description.cpp @ line 145
//boost::scoped_array<char>
buffer(new char[512]) ;
//const std::streamsize count
= io::read(ifilter, buffer.get(), 512) ;
}
The problem occurs during the reading operation @
line: “ifilter >> rs”: the process is blocked in boost/iostreams/src/file_description.cpp
@ line 145 (“if (!::ReadFile(pimpl_->handle_, s, n, &result, NULL))”)
when this line is executed.
I’ve tried to use boost::iostream::read()
template function without more success.
I’ve checked the file after the writing
operation w/ 7z and everything is fine at this point.
I’ve tried the same code snippet w/ ZLib and
BZip2 codecs without trouble.
My environment is:
Visual
C++ 7.1
Boost
1.34.1
Windows
XP SP2
Is there any bug in GZip decompressor with the file_descriptor_source?
Or I’ve missed something?
Any help will be appreciated.
Best regards,
Marc VIALA