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