uint32_t crc32(io::reader& src, uint32_t crc /* = crc32_init()*/){ buffer<byte> bin; bin.resize(K_BufferSize); while (src.readable()){ auto rest = src.read(to_range(bin)); crc = ::crc32(crc, (const Bytef*)bin.begin(), (uInt)(bin.size() - rest.size())); } return crc; }