diff options
author | Harald Welte <laforge@gnumonks.org> | 2012-01-14 21:53:41 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2012-01-14 21:54:17 +0100 |
commit | b0f91513cd8d06262711e18734cf415f8a17d7a6 (patch) | |
tree | 322b96f4905903cd7ea07abb5114825faae607d5 /include/osmocom/core | |
parent | 7be8c2b686701cf0b71eec0bd083d3b33e9a5c41 (diff) |
msgb: introduce msgb_trim() and msgb_l3trim() to trim msgb's
Diffstat (limited to 'include/osmocom/core')
-rw-r--r-- | include/osmocom/core/msgb.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h index 9f46e6c6..ea2ee533 100644 --- a/include/osmocom/core/msgb.h +++ b/include/osmocom/core/msgb.h @@ -312,6 +312,34 @@ static inline void msgb_reserve(struct msgb *msg, int len) msg->tail += len; } +/*! \brief Trim the msgb to a given absolute length + * \param[in] msg message buffer + * \param[in] len new total length of buffer + * \returns 0 in case of success, negative in case of error + */ +static inline int msgb_trim(struct msgb *msg, int len) +{ + if (msg->len < len) + return -1; + + msg->len -= len; + msg->tail -= len; + if (msg->tail < msg->data) + msg->tail = msg->data; + + return 0; +} + +/*! \brief Trim the msgb to a given layer3 length + * \pram[in] msg message buffer + * \param[in] l3len new layer3 length + * \returns 0 in case of success, negative in case of error + */ +static inline int msgb_l3trim(struct msgb *msg, int l3len) +{ + return msgb_trim(msg, (msg->l3h - msg->data) + l3len); +} + /*! \brief Allocate message buffer with specified headroom * \param[in] size size in bytes, including headroom * \param[in] headroom headroom in bytes |