19e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 29e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#include "zfstream.h" 39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 49e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf::gzfilebuf() : 59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project file(NULL), 69e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode(0), 79e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project own_file_descriptor(0) 89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ } 99e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf::~gzfilebuf() { 119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project sync(); 139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( own_file_descriptor ) 149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project close(); 159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf *gzfilebuf::open( const char *name, 199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int io_mode ) { 209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( is_open() ) 229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return NULL; 239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char char_mode[10]; 259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char *p = char_mode; 269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & ios::in ) { 289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::in; 299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'r'; 309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else if ( io_mode & ios::app ) { 319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::app; 329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'a'; 339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else { 349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::out; 359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'w'; 369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & ios::binary ) { 399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode |= ios::binary; 409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'b'; 419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Hard code the compression level 449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & (ios::out|ios::app )) { 459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = '9'; 469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Put the end-of-string indicator 499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p = '\0'; 509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( (file = gzopen(name, char_mode)) == NULL ) 529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return NULL; 539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project own_file_descriptor = 1; 559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return this; 579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf *gzfilebuf::attach( int file_descriptor, 619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int io_mode ) { 629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( is_open() ) 649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return NULL; 659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char char_mode[10]; 679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char *p = char_mode; 689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & ios::in ) { 709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::in; 719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'r'; 729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else if ( io_mode & ios::app ) { 739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::app; 749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'a'; 759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else { 769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode = ios::out; 779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'w'; 789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & ios::binary ) { 819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mode |= ios::binary; 829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = 'b'; 839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Hard code the compression level 869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( io_mode & (ios::out|ios::app )) { 879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p++ = '9'; 889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Put the end-of-string indicator 919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *p = '\0'; 929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( (file = gzdopen(file_descriptor, char_mode)) == NULL ) 949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return NULL; 959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project own_file_descriptor = 0; 979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return this; 999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf *gzfilebuf::close() { 1039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( is_open() ) { 1059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project sync(); 1079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzclose( file ); 1089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project file = NULL; 1099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return this; 1139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::setcompressionlevel( int comp_level ) { 1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return gzsetparams(file, comp_level, -2); 1199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::setcompressionstrategy( int comp_strategy ) { 1239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return gzsetparams(file, -2, comp_strategy); 1259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstreampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) { 1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return streampos(EOF); 1329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::underflow() { 1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // If the file hasn't been opened for reading, error. 1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !is_open() || !(mode & ios::in) ) 1399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // if a buffer doesn't exists, allocate one. 1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !base() ) { 1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( (allocate()) == EOF ) 1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setp(0,0); 1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else { 1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( in_avail() ) 1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return (unsigned char) *gptr(); 1529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( out_waiting() ) { 1549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( flushbuf() == EOF ) 1559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Attempt to fill the buffer. 1619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int result = fillbuf(); 1639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( result == EOF ) { 1649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // disable get area 1659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setg(0,0,0); 1669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return (unsigned char) *gptr(); 1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::overflow( int c ) { 1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !is_open() || !(mode & ios::out) ) 1769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !base() ) { 1799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( allocate() == EOF ) 1809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setg(0,0,0); 1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } else { 1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (in_avail()) { 1849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (out_waiting()) { 1879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (flushbuf() == EOF) 1889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 1899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int bl = blen(); 1939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setp( base(), base() + bl); 1949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( c != EOF ) { 1969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *pptr() = c; 1989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project pbump(1); 1999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return 0; 2039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::sync() { 2079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !is_open() ) 2099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 2109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( out_waiting() ) 2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return flushbuf(); 2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return 0; 2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::flushbuf() { 2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int n; 2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char *q; 2229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project q = pbase(); 2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project n = pptr() - q; 2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( gzwrite( file, q, n) < n ) 2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return EOF; 2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setp(0,0); 2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return 0; 2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectint gzfilebuf::fillbuf() { 2369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int required; 2389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project char *p; 2399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project p = base(); 2419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project required = blen(); 2439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int t = gzread( file, p, required ); 2459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( t <= 0) return EOF; 2479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project setg( base(), base(), base()+t); 2499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return t; 2519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilestream_common::gzfilestream_common() : 2559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 2569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ } 2579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilestream_common::~gzfilestream_common() 2599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ } 2609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid gzfilestream_common::attach( int fd, int io_mode ) { 2629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !buffer.attach( fd, io_mode) ) 2649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear( ios::failbit | ios::badbit ); 2659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 2669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear(); 2679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid gzfilestream_common::open( const char *name, int io_mode ) { 2719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !buffer.open( name, io_mode ) ) 2739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear( ios::failbit | ios::badbit ); 2749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 2759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear(); 2769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid gzfilestream_common::close() { 2809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ( !buffer.close() ) 2829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear( ios::failbit | ios::badbit ); 2839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzfilebuf *gzfilestream_common::rdbuf() 2879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 2889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return &buffer; 2899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzifstream::gzifstream() : 2929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 2939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 2949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear( ios::badbit ); 2959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzifstream::gzifstream( const char *name, int io_mode ) : 2989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 2999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzfilestream_common::open( name, io_mode ); 3019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzifstream::gzifstream( int fd, int io_mode ) : 3049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 3059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzfilestream_common::attach( fd, io_mode ); 3079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzifstream::~gzifstream() { } 3109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzofstream::gzofstream() : 3129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 3139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project clear( ios::badbit ); 3159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzofstream::gzofstream( const char *name, int io_mode ) : 3189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 3199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzfilestream_common::open( name, io_mode ); 3219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzofstream::gzofstream( int fd, int io_mode ) : 3249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project ios( gzfilestream_common::rdbuf() ) 3259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzfilestream_common::attach( fd, io_mode ); 3279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectgzofstream::~gzofstream() { } 330