我正在尝试使用nginx缓冲链并在一些实验代码中使用它。为了做到这一点,我需要先将链变平为一块内存。这是我到目前为止所得到的(实际生产代码有点不同,所以这是未经测试的):
u_char *flatten_chain(ngx_chain_t *out) {
off_t bsize;
ngx_chain_t *out_ptr;
u_char *ret, *ret_ptr;
uint64_t flattenSize = 0;
out_ptr = out;
while (out_ptr) {
if(!out_ptr->buf->in_file) {
bsize = ngx_buf_size(out_ptr->buf);
flattenSize += bsize;
}
out_ptr = out_ptr->next;
}
ret = malloc(flattenSize);
ret_ptr = ret;
out_ptr = out;
while (out_ptr) {
bsize = ngx_buf_size(out_ptr->buf);
if(!out_ptr->buf->in_file) {
memcpy(ret_ptr, out_ptr->buf->pos, (size_t)bsize);
ret_ptr += bsize;
}
out_ptr = out_ptr->next;
}
return(ret);
}
然而,它似乎不起作用。免责声明:它可能 工作,我的数据在其他地方被破坏了...但是当我调查时,有人可以确认或否认上述应该工作?
谢谢!