static inline size_t rioWrite(rio *r, const void *buf, size_t len) {
while (len) {
// 写的字节长度,不能超过每次读或写的最大字节数max_processing_chunk
size_t bytes_to_write = (r->max_processing_chunk && r->max_processing_chunk < len) ? r->max_processing_chunk : len;
// 更新和校验
if (r->update_cksum) r->update_cksum(r,buf,bytes_to_write);
// 调用自身的write方法写入
if (r->write(r,buf,bytes_to_write) == 0)
return 0;//跳出循环
// 更新偏移量
buf = (char*)buf + bytes_to_write;
// 更新剩余长度
len -= bytes_to_write;
// 更新读或写的字节数
r->processed_bytes += bytes_to_write;
}
return 1;
}