void spec_compress(int in, int out, int lev) { level=lev; part_nb=0; clear_bufs(); ifd=in; ofd=out; zip(ifd,ofd); }
void spec_uncompress(int in, int out, int lev) { level=lev; part_nb=0; clear_bufs(); ifd=in; ofd=out; method = get_method(1); unzip(ifd,ofd); }
int posix_storage::readv(session_settings const& , span<iovec_t const> bufs , piece_index_t const piece, int const offset , storage_error& error) { return readwritev(files(), bufs, piece, offset, error , [this](file_index_t const file_index , std::int64_t const file_offset , span<iovec_t const> vec, storage_error& ec) { if (files().pad_file_at(file_index)) { // reading from a pad file yields zeroes clear_bufs(vec); return bufs_size(vec); } FILE* const f = open_file(file_index, open_mode::read_only , file_offset, ec); if (ec.ec) return -1; // set this unconditionally in case the upper layer would like to treat // short reads as errors ec.operation = operation_t::file_read; int ret = 0; for (auto buf : vec) { int const r = static_cast<int>(fread(buf.data(), 1 , static_cast<std::size_t>(buf.size()), f)); if (r == 0) { ec.ec.assign(errno, generic_category()); break; } ret += r; // the file may be shorter than we think if (r < buf.size()) break; } fclose(f); // we either get an error or 0 or more bytes read TORRENT_ASSERT(ec.ec || ret > 0); TORRENT_ASSERT(ret <= bufs_size(vec)); if (ec.ec) { ec.file(file_index); return -1; } return ret; }); }