MINOR: flt_trace: Use htx_find_offset() to get the available payload length
The trace_get_htx_datalen() function now uses htx_find_offset() to get the
payload length, ie. the length of consecutives DATA blocks.
diff --git a/src/flt_trace.c b/src/flt_trace.c
index 437f283..5a26fab 100644
--- a/src/flt_trace.c
+++ b/src/flt_trace.c
@@ -157,23 +157,22 @@
trace_get_htx_datalen(struct htx *htx, unsigned int offset, unsigned int len)
{
struct htx_blk *blk;
- uint32_t sz, data = 0;
+ struct htx_ret htxret = htx_find_offset(htx, offset);
+ uint32_t data = 0;
- for (blk = htx_get_first_blk(htx); blk; blk = htx_get_next_blk(htx, blk)) {
- if (htx_get_blk_type(blk) != HTX_BLK_DATA)
- break;
-
- sz = htx_get_blksz(blk);
- if (offset >= sz) {
- offset -= sz;
- continue;
- }
- data += sz - offset;
- offset = 0;
- if (data > len) {
- data = len;
+ blk = htxret.blk;
+ if (blk && htxret.ret && htx_get_blk_type(blk) == HTX_BLK_DATA) {
+ data += htxret.ret;
+ blk = htx_get_next_blk(htx, blk);
+ }
+ while (blk) {
+ if (htx_get_blk_type(blk) == HTX_BLK_UNUSED)
+ goto next;
+ else if (htx_get_blk_type(blk) != HTX_BLK_DATA)
break;
- }
+ data += htx_get_blksz(blk);
+ next:
+ blk = htx_get_next_blk(htx, blk);
}
return data;
}