qioerr qbuffer_init_part(qbuffer_part_t* p, qbytes_t* bytes, int64_t skip_bytes, int64_t len_bytes, int64_t end_offset) { if( len_bytes < 0 || skip_bytes < 0 || skip_bytes + len_bytes > bytes->len ) QIO_RETURN_CONSTANT_ERROR(EINVAL, "range outside of buffer"); qbytes_retain(bytes); p->bytes = bytes; p->skip_bytes = skip_bytes; p->len_bytes = len_bytes; p->end_offset = end_offset; p->flags = QB_PART_FLAGS_NONE; if( skip_bytes == 0 && len_bytes == bytes->len ) p->flags = QB_PART_FLAGS_EXTENDABLE_TO_ENTIRE_BYTES; return 0; }
err_t qbuffer_init_part(qbuffer_part_t* p, qbytes_t* bytes, int64_t skip_bytes, int64_t len_bytes, int64_t end_offset) { if( len_bytes < 0 || skip_bytes < 0 ) return EINVAL; if( skip_bytes + len_bytes > bytes->len ) return EINVAL; qbytes_retain(bytes); p->bytes = bytes; p->skip_bytes = skip_bytes; p->len_bytes = len_bytes; p->end_offset = end_offset; p->flags = QB_PART_FLAGS_NONE; if( skip_bytes == 0 && len_bytes == bytes->len ) p->flags = QB_PART_FLAGS_EXTENDABLE_TO_ENTIRE_BYTES; return 0; }