lib: add stream_set_endp()

* lib/stream.[ch]:

    - Add stream_set_endp(). This can be used to trim data (for
      example, padding) at the end of a stream.

    - Fix swapped 'getp' and 'endp' parameters in STREAM_WARN_OFFSETS.

From: Subbaiah Venkata <svenkata@google.com>
Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
Subbaiah Venkata 2012-03-24 13:10:19 -07:00 committed by Avneesh Sachdev
parent bed930fd70
commit d531050b7b
2 changed files with 18 additions and 3 deletions

View File

@ -52,7 +52,7 @@
* using stream_put..._at() functions. * using stream_put..._at() functions.
*/ */
#define STREAM_WARN_OFFSETS(S) \ #define STREAM_WARN_OFFSETS(S) \
zlog_warn ("&(struct stream): %p, size: %lu, endp: %lu, getp: %lu\n", \ zlog_warn ("&(struct stream): %p, size: %lu, getp: %lu, endp: %lu\n", \
(S), \ (S), \
(unsigned long) (S)->size, \ (unsigned long) (S)->size, \
(unsigned long) (S)->getp, \ (unsigned long) (S)->getp, \
@ -214,6 +214,20 @@ stream_set_getp (struct stream *s, size_t pos)
s->getp = pos; s->getp = pos;
} }
void
stream_set_endp (struct stream *s, size_t pos)
{
STREAM_VERIFY_SANE(s);
if (!GETP_VALID (s, pos))
{
STREAM_BOUND_WARN (s, "set endp");
pos = s->endp;
}
s->endp = pos;
}
/* Forward pointer. */ /* Forward pointer. */
void void
stream_forward_getp (struct stream *s, size_t size) stream_forward_getp (struct stream *s, size_t size)
@ -934,9 +948,9 @@ stream_fifo_pop (struct stream_fifo *fifo)
if (fifo->head == NULL) if (fifo->head == NULL)
fifo->tail = NULL; fifo->tail = NULL;
}
fifo->count--; fifo->count--;
}
return s; return s;
} }

View File

@ -146,6 +146,7 @@ extern size_t stream_get_size (struct stream *);
extern u_char *stream_get_data (struct stream *); extern u_char *stream_get_data (struct stream *);
extern void stream_set_getp (struct stream *, size_t); extern void stream_set_getp (struct stream *, size_t);
extern void stream_set_endp (struct stream *, size_t);
extern void stream_forward_getp (struct stream *, size_t); extern void stream_forward_getp (struct stream *, size_t);
extern void stream_forward_endp (struct stream *, size_t); extern void stream_forward_endp (struct stream *, size_t);