mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 22:31:28 +02:00
MINOR: buffer: replace bi_del() and bo_del() with b_del()
Till now the callers had to know which one to call for specific use cases. Let's fuse them now since a single one will remain after the API migration. Given that bi_del() may only be used where o==0, just combine the two tests by first removing output data then only input.
This commit is contained in:
parent
a1f78fb652
commit
e5f12ce7f2
@ -415,6 +415,23 @@ static inline void b_set_data(struct buffer *b, size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
/* b_del() : skips <del> bytes in a buffer <b>. Covers both the output and the
|
||||
* input parts so it's up to the caller to know where it plays and that <del>
|
||||
* is always smaller than the amount of data in the buffer.
|
||||
*/
|
||||
static inline void b_del(struct buffer *b, size_t del)
|
||||
{
|
||||
if (del <= b->o) {
|
||||
b->o -= del;
|
||||
del = 0;
|
||||
}
|
||||
if (del) {
|
||||
b->p = b_peek(b, del);
|
||||
b->i -= del;
|
||||
del = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* b_realign_if_empty() : realigns a buffer if it's empty */
|
||||
static inline void b_realign_if_empty(struct buffer *b)
|
||||
{
|
||||
|
@ -85,26 +85,6 @@ static inline unsigned int b_to_end(const struct buffer *b)
|
||||
return b->data + b->size - b->p;
|
||||
}
|
||||
|
||||
/* Skips <del> bytes in a one-way buffer <b> : <p> advances by <del>, <i>
|
||||
* shrinks by <del> as well, and <o> is left untouched (supposed to be zero).
|
||||
* The caller is responsible for ensuring that <del> is always smaller than or
|
||||
* equal to b->i.
|
||||
*/
|
||||
static inline void bi_del(struct buffer *b, unsigned int del)
|
||||
{
|
||||
b->i -= del;
|
||||
b->p = b_ptr(b, del);
|
||||
}
|
||||
|
||||
/* Skips <del> bytes from the output of buffer <b> by simply shrinking <o>.
|
||||
* The caller is responsible for ensuring that <del> is always smaller than or
|
||||
* equal to b->o.
|
||||
*/
|
||||
static inline void bo_del(struct buffer *b, unsigned int del)
|
||||
{
|
||||
b->o -= del;
|
||||
}
|
||||
|
||||
/* Return the buffer's length in bytes by summing the input and the output */
|
||||
static inline int buffer_len(const struct buffer *buf)
|
||||
{
|
||||
@ -560,7 +540,7 @@ static inline int bi_eat(struct buffer *b, const struct ist ist)
|
||||
{
|
||||
int ret = b_isteq(b, 0, b->i, ist);
|
||||
if (ret > 0)
|
||||
bi_del(b, ret);
|
||||
b_del(b, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -727,8 +727,7 @@ static inline void channel_slow_realign(struct channel *chn, char *swap)
|
||||
*/
|
||||
static inline void co_skip(struct channel *chn, int len)
|
||||
{
|
||||
chn->buf->o -= len;
|
||||
|
||||
b_del(chn->buf, len);
|
||||
if (buffer_empty(chn->buf))
|
||||
chn->buf->p = chn->buf->data;
|
||||
|
||||
|
34
src/mux_h2.c
34
src/mux_h2.c
@ -571,7 +571,7 @@ static __maybe_unused int h2_peek_frame_hdr(const struct buffer *b, struct h2_fh
|
||||
*/
|
||||
static inline __maybe_unused void h2_skip_frame_hdr(struct buffer *b)
|
||||
{
|
||||
bi_del(b, 9);
|
||||
b_del(b, 9);
|
||||
}
|
||||
|
||||
/* same as above, automatically advances the buffer on success */
|
||||
@ -760,7 +760,7 @@ static int h2c_frt_recv_preface(struct h2c *h2c)
|
||||
|
||||
ret2 = h2c_snd_settings(h2c);
|
||||
if (ret2 > 0)
|
||||
bi_del(h2c->dbuf, ret1);
|
||||
b_del(h2c->dbuf, ret1);
|
||||
|
||||
return ret2;
|
||||
}
|
||||
@ -1899,7 +1899,7 @@ static void h2_process_demux(struct h2c *h2c)
|
||||
*/
|
||||
if (unlikely(h2c->last_sid >= 0) && h2c->dsi > h2c->last_sid) {
|
||||
ret = MIN(h2c->dbuf->i, h2c->dfl);
|
||||
bi_del(h2c->dbuf, ret);
|
||||
b_del(h2c->dbuf, ret);
|
||||
h2c->dfl -= ret;
|
||||
ret = h2c->dfl == 0;
|
||||
goto strm_err;
|
||||
@ -1979,7 +1979,7 @@ static void h2_process_demux(struct h2c *h2c)
|
||||
* we reach the end.
|
||||
*/
|
||||
ret = MIN(h2c->dbuf->i, h2c->dfl);
|
||||
bi_del(h2c->dbuf, ret);
|
||||
b_del(h2c->dbuf, ret);
|
||||
h2c->dfl -= ret;
|
||||
ret = h2c->dfl == 0;
|
||||
}
|
||||
@ -1997,7 +1997,7 @@ static void h2_process_demux(struct h2c *h2c)
|
||||
break;
|
||||
|
||||
if (h2c->st0 != H2_CS_FRAME_H) {
|
||||
bi_del(h2c->dbuf, h2c->dfl);
|
||||
b_del(h2c->dbuf, h2c->dfl);
|
||||
h2c->st0 = H2_CS_FRAME_H;
|
||||
}
|
||||
}
|
||||
@ -2728,7 +2728,7 @@ static int h2_frt_decode_headers(struct h2s *h2s, struct buffer *buf, int count)
|
||||
}
|
||||
|
||||
/* now consume the input data */
|
||||
bi_del(h2c->dbuf, h2c->dfl);
|
||||
b_del(h2c->dbuf, h2c->dfl);
|
||||
h2c->st0 = H2_CS_FRAME_H;
|
||||
buf->i += outlen;
|
||||
|
||||
@ -2788,7 +2788,7 @@ static int h2_frt_transfer_data(struct h2s *h2s, struct buffer *buf, int count)
|
||||
}
|
||||
|
||||
/* skip the padlen byte */
|
||||
bi_del(h2c->dbuf, 1);
|
||||
b_del(h2c->dbuf, 1);
|
||||
h2c->dfl--;
|
||||
h2c->rcvd_c++; h2c->rcvd_s++;
|
||||
h2c->dff &= ~H2_F_DATA_PADDED;
|
||||
@ -2857,7 +2857,7 @@ static int h2_frt_transfer_data(struct h2s *h2s, struct buffer *buf, int count)
|
||||
/* now mark the input data as consumed (will be deleted from the buffer
|
||||
* by the caller when seeing FRAME_A after sending the window update).
|
||||
*/
|
||||
bi_del(h2c->dbuf, flen);
|
||||
b_del(h2c->dbuf, flen);
|
||||
h2c->dfl -= flen;
|
||||
h2c->rcvd_c += flen;
|
||||
h2c->rcvd_s += flen; // warning, this can also affect the closed streams!
|
||||
@ -3075,7 +3075,7 @@ static int h2s_frt_make_resp_headers(struct h2s *h2s, struct buffer *buf)
|
||||
outbuf.str[4] |= H2_F_HEADERS_END_STREAM;
|
||||
|
||||
/* consume incoming H1 response */
|
||||
bo_del(buf, ret);
|
||||
b_del(buf, ret);
|
||||
|
||||
/* commit the H2 response */
|
||||
h2c->mbuf->o += outbuf.len;
|
||||
@ -3087,7 +3087,7 @@ static int h2s_frt_make_resp_headers(struct h2s *h2s, struct buffer *buf)
|
||||
*/
|
||||
if (es_now) {
|
||||
// trim any possibly pending data (eg: inconsistent content-length)
|
||||
bo_del(buf, buf->o);
|
||||
b_del(buf, buf->o);
|
||||
|
||||
h1m->state = HTTP_MSG_DONE;
|
||||
h2s->flags |= H2_SF_ES_SENT;
|
||||
@ -3189,7 +3189,7 @@ static int h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf)
|
||||
h2s_error(h2s, H2_ERR_INTERNAL_ERROR);
|
||||
goto end;
|
||||
}
|
||||
bo_del(buf, ret);
|
||||
b_del(buf, ret);
|
||||
total += ret;
|
||||
h1m->state = HTTP_MSG_CHUNK_SIZE;
|
||||
}
|
||||
@ -3211,7 +3211,7 @@ static int h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf)
|
||||
size = chunk;
|
||||
h1m->curr_len = chunk;
|
||||
h1m->body_len += chunk;
|
||||
bo_del(buf, ret);
|
||||
b_del(buf, ret);
|
||||
total += ret;
|
||||
h1m->state = size ? HTTP_MSG_DATA : HTTP_MSG_TRAILERS;
|
||||
if (!size)
|
||||
@ -3328,7 +3328,7 @@ static int h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf)
|
||||
|
||||
/* consume incoming H1 response */
|
||||
if (size > 0) {
|
||||
bo_del(buf, size);
|
||||
b_del(buf, size);
|
||||
total += size;
|
||||
h1m->curr_len -= size;
|
||||
h2s->mws -= size;
|
||||
@ -3348,7 +3348,7 @@ static int h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf)
|
||||
|
||||
if (!(h1m->flags & H1_MF_CHNK)) {
|
||||
// trim any possibly pending data (eg: inconsistent content-length)
|
||||
bo_del(buf, buf->o);
|
||||
b_del(buf, buf->o);
|
||||
|
||||
h1m->state = HTTP_MSG_DONE;
|
||||
}
|
||||
@ -3399,10 +3399,10 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags)
|
||||
break;
|
||||
}
|
||||
total += count;
|
||||
bo_del(buf, count);
|
||||
b_del(buf, count);
|
||||
|
||||
// trim any possibly pending data (eg: extra CR-LF, ...)
|
||||
bo_del(buf, buf->o);
|
||||
b_del(buf, buf->o);
|
||||
|
||||
h2s->res.state = HTTP_MSG_DONE;
|
||||
break;
|
||||
@ -3417,7 +3417,7 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags)
|
||||
/* trim any possibly pending data after we close (extra CR-LF,
|
||||
* unprocessed trailers, abnormal extra data, ...)
|
||||
*/
|
||||
bo_del(buf, buf->o);
|
||||
b_del(buf, buf->o);
|
||||
}
|
||||
|
||||
/* RST are sent similarly to frame acks */
|
||||
|
Loading…
x
Reference in New Issue
Block a user