aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-icmpv6.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2009-04-05 18:20:20 +0000
committerGuy Harris <guy@alum.mit.edu>2009-04-05 18:20:20 +0000
commitee8ddd5123d18342361329aa715a70c26906d3a6 (patch)
tree2005367bc9b1dda3a1b596a009726386a9942b3b /epan/dissectors/packet-icmpv6.c
parenta36f62678c7a51f370509d51ed62e897cc55bf3f (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.c44
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