diff options
author | Guy Harris <guy@alum.mit.edu> | 2009-04-05 18:20:20 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2009-04-05 18:20:20 +0000 |
commit | ee8ddd5123d18342361329aa715a70c26906d3a6 (patch) | |
tree | 2005367bc9b1dda3a1b596a009726386a9942b3b /epan/dissectors/packet-icmpv6.c | |
parent | a36f62678c7a51f370509d51ed62e897cc55bf3f (diff) |
Use an emem_strbuf_t in bitrange().
svn path=/trunk/; revision=27965
Diffstat (limited to 'epan/dissectors/packet-icmpv6.c')
-rw-r--r-- | epan/dissectors/packet-icmpv6.c | 44 |
1 files changed, 10 insertions, 34 deletions
diff --git a/epan/dissectors/packet-icmpv6.c b/epan/dissectors/packet-icmpv6.c index a74134d9fe..e856249e8c 100644 --- a/epan/dissectors/packet-icmpv6.c +++ b/epan/dissectors/packet-icmpv6.c @@ -879,25 +879,14 @@ again: * Note that the packet format was changed several times in the past. */ -static const char * -bitrange0(guint32 v, int s, char *buf, int buflen) +static void +bitrange0(guint32 v, int s, emem_strbuf_t *strbuf) { guint32 v0; - char *p, *ep; int off; - int i, l; - - if (buflen < 1) - return NULL; - if (buflen == 1) { - buf[0] = '\0'; - return NULL; - } + int i; v0 = v; - p = buf; - ep = buf + buflen - 1; - memset(buf, 0, buflen); off = 0; while (off < 32) { /* shift till we have 0x01 */ @@ -920,39 +909,26 @@ bitrange0(guint32 v, int s, char *buf, int buflen) break; } if (i == 1) - l = g_snprintf(p, ep - p, ",%d", s + off); + ep_strbuf_append_printf(strbuf, ",%d", s + off); else { - l = g_snprintf(p, ep - p, ",%d-%d", s + off, + ep_strbuf_append_printf(strbuf, ",%d-%d", s + off, s + off + i - 1); } - if (l == -1 || l >= ep - p) { - return NULL; - } v >>= i; off += i; } - - return buf; } static const char * bitrange(tvbuff_t *tvb, int offset, int l, int s) { - static char buf[1024]; - char *q, *eq; + emem_strbuf_t *strbuf; int i; - memset(buf, 0, sizeof(buf)); - q = buf; - eq = buf + sizeof(buf) - 1; - for (i = 0; i < l; i++) { - if (bitrange0(tvb_get_ntohl(tvb, offset + i * 4), s + i * 4, q, eq - q) == NULL) { - if (q != buf && q + 5 < buf + sizeof(buf)) - g_strlcpy(q, ",...", 5); - return buf; - } - } + strbuf = ep_strbuf_new_label(""); + for (i = 0; i < l; i++) + bitrange0(tvb_get_ntohl(tvb, offset + i * 4), s + i * 4, strbuf); - return buf + 1; + return strbuf->str + 1; /* skip initial "," */ } static void |