$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Marc Viala Perso (marc.viala_at_[hidden])
Date: 2008-01-17 17:13:54
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