X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/665b5651a8ac6a10de9cacbdb1af51134abcdb97..6e12d87355718f309ce9f33183ff8235b9c5eb0d:/cpack.c diff --git a/cpack.c b/cpack.c index d2e765d4..b863d8e7 100644 --- a/cpack.c +++ b/cpack.c @@ -32,12 +32,13 @@ #endif #include +#include #include #include "cpack.h" #include "extract.h" -static u_int8_t * +u_int8_t * cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment) { size_t misalignment = (size_t)(p - buf) % alignment; @@ -52,7 +53,7 @@ cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment) * wordsize bytes remain in the buffer after the boundary. Otherwise, * return a pointer to the boundary. */ -static u_int8_t * +u_int8_t * cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize) { u_int8_t *next; @@ -67,6 +68,17 @@ cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize) return next; } +/* Advance by N bytes without returning them. */ +int +cpack_advance(struct cpack_state *cs, const size_t toskip) +{ + /* No space left? */ + if (cs->c_next - cs->c_buf + toskip > cs->c_len) + return -1; + cs->c_next += toskip; + return 0; +} + int cpack_init(struct cpack_state *cs, u_int8_t *buf, size_t buflen) { @@ -132,7 +144,7 @@ int cpack_uint8(struct cpack_state *cs, u_int8_t *u) { /* No space left? */ - if (cs->c_next - cs->c_buf >= cs->c_len) + if ((size_t)(cs->c_next - cs->c_buf) >= cs->c_len) return -1; *u = *cs->c_next;