int nghttp2_bufs_add(nghttp2_bufs *bufs, const void *data, size_t len) { int rv; size_t nwrite; nghttp2_buf *buf; const uint8_t *p; if(bufs_avail(bufs) < (ssize_t)len) { return NGHTTP2_ERR_BUFFER_ERROR; } p = (const uint8_t *)data; while(len) { buf = &bufs->cur->buf; nwrite = nghttp2_min((size_t)nghttp2_buf_avail(buf), len); if(nwrite == 0) { rv = bufs_alloc_chain(bufs); if(rv != 0) { return rv; } continue; } buf->last = nghttp2_cpymem(buf->last, p, nwrite); p += len; len -= nwrite; } return 0; }
int nghttp2_bufs_add(nghttp2_bufs *bufs, const void *data, size_t len) { int rv; size_t nwrite; nghttp2_buf *buf; const uint8_t *p; // h1994st: if (!bufs->random_enabled && bufs_avail(bufs) < len) { return NGHTTP2_ERR_BUFFER_ERROR; } p = data; while (len) { buf = &bufs->cur->buf; nwrite = nghttp2_min(nghttp2_buf_avail(buf), len); if (nwrite == 0) { rv = bufs_alloc_chain(bufs); if (rv != 0) { return rv; } continue; } buf->last = nghttp2_cpymem(buf->last, p, nwrite); p += nwrite; len -= nwrite; } return 0; }
static int bufs_ensure_addb(nghttp2_bufs *bufs) { int rv; nghttp2_buf *buf; buf = &bufs->cur->buf; if (nghttp2_buf_avail(buf) > 0) { return 0; } rv = bufs_alloc_chain(bufs); if (rv != 0) { return rv; } return 0; }
static ssize_t bufs_avail(nghttp2_bufs *bufs) { return (ssize_t)(nghttp2_buf_avail(&bufs->cur->buf) + (bufs->chunk_length - bufs->offset) * (bufs->max_chunk - bufs->chunk_used)); }