Boolean operator ==(buffer&x, buffer& y) { if ( x.content_sz() != y.content_sz() ) { debug(cerr, x.content_sz()); debug(cerr, y.content_sz()); } unsigned char* x_buf = (unsigned char*)x.get_base(); unsigned char* y_buf = (unsigned char*)y.get_base(); for ( int i=0; i<x.content_sz(); i++ ) { if ( x_buf[i] != y_buf[i] ) { debug(cerr, i); debug(cerr, x_buf[i]); debug(cerr, y_buf[i]); #ifndef __osf__ debug(cerr, hex(x_buf[i])); debug(cerr, hex(y_buf[i])); #endif //return false; } } return true; }
void zip::decompress(buffer& compressed, buffer& uncompressed) { fstream out(COMPRESSED, ios::out|ios::trunc); if ( !out ) throw(streamException(out.rdstate())); if ( out.write(compressed.get_base(), compressed.content_sz()) == 0 ) throw(streamException(out.rdstate())); out.close(); system(form("gzip -cd %s > %s", COMPRESSED, UNCOMPRESSED)); fstream in(UNCOMPRESSED, ios::in); if ( !in ) throw(streamException(in.rdstate())); int x = bytes(in); uncompressed.expand_chunk(x); if ( in.read(uncompressed.get_base(), x) == 0 || x != in.gcount() ) throw(streamException(in.rdstate())); uncompressed.set_content_sz(x); in.close(); return; }
void zip::compress(const buffer& uncompressed, buffer& compressed) { //////////////////////////////////////// // code for testing. I know it is slow. //////////////////////////////////////// fstream out(UNCOMPRESSED, ios::out|ios::trunc); if ( !out ) throw(streamException(out.rdstate())); if ( out.write(uncompressed.get_base(), uncompressed.content_sz()) == 0 ) throw(streamException(out.rdstate())); out.close(); system(form("gzip -c %s > %s", UNCOMPRESSED, COMPRESSED)); fstream in(COMPRESSED, ios::in); if ( !in ) throw(streamException(in.rdstate())); int x = bytes(in); compressed.expand_chunk(x); if ( in.read(compressed.get_base(), x) == 0 || x != in.gcount() ) throw(streamException(in.rdstate())); compressed.set_content_sz(x); in.close(); return; }