From abe1a6193f8558e1a1ea42ba431d164c18b08a3f Mon Sep 17 00:00:00 2001
From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org"
Date: Thu, 7 Jun 2007 16:53:56 +0000
Subject: nfct_snprintf now returns the number of bytes that would have been
written, not just the number of bytes written. Emulate snprintf behaviour as
in specified in C99
---
src/conntrack/snprintf_xml.c | 134 +++++++++++++++++++++----------------------
1 file changed, 67 insertions(+), 67 deletions(-)
(limited to 'src/conntrack/snprintf_xml.c')
diff --git a/src/conntrack/snprintf_xml.c b/src/conntrack/snprintf_xml.c
index 892c85b..56b2016 100644
--- a/src/conntrack/snprintf_xml.c
+++ b/src/conntrack/snprintf_xml.c
@@ -112,38 +112,38 @@ static int __snprintf_addr_xml(char *buf,
unsigned int type)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(type) {
case __ADDR_SRC:
ret = snprintf(buf, len, "");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
break;
case __ADDR_DST:
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
switch (tuple->l3protonum) {
case AF_INET:
- ret = __snprintf_ipv4_xml(buf+size, len, tuple, type);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_ipv4_xml(buf+offset, len, tuple, type);
+ BUFFER_SIZE(ret, size, len, offset);
break;
case AF_INET6:
- ret = __snprintf_ipv6_xml(buf+size, len, tuple, type);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_ipv6_xml(buf+offset, len, tuple, type);
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
switch(type) {
case __ADDR_SRC:
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
break;
case __ADDR_DST:
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
break;
}
@@ -156,7 +156,7 @@ static int __snprintf_proto_xml(char *buf,
unsigned int type)
{
int ret = 0;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(tuple->protonum) {
case IPPROTO_TCP:
@@ -165,11 +165,11 @@ static int __snprintf_proto_xml(char *buf,
if (type == __ADDR_SRC) {
ret = snprintf(buf, len, "%u",
ntohs(tuple->l4src.tcp.port));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
} else {
ret = snprintf(buf, len, "%u",
ntohs(tuple->l4dst.tcp.port));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
break;
}
@@ -183,15 +183,15 @@ static int __snprintf_counters_xml(char *buf,
unsigned int type)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
ret = snprintf(buf, len, "%llu",
ct->counters[type].packets);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "%llu",
+ ret = snprintf(buf+offset, len, "%llu",
ct->counters[type].bytes);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -202,55 +202,55 @@ static int __snprintf_tuple_xml(char *buf,
unsigned int dir)
{
int ret;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
const struct __nfct_tuple *tuple = &ct->tuple[dir];
ret = snprintf(buf, len, "",
dir == __DIR_ORIG ? "original" : "reply");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"",
tuple->l3protonum, __l3proto2str(tuple->l3protonum));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_addr_xml(buf+size, len, tuple, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_addr_xml(buf+size, len, tuple, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_addr_xml(buf+offset, len, tuple, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"",
tuple->protonum, __proto2str(tuple->protonum));
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto_xml(buf+size, len, tuple, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_proto_xml(buf+offset, len, tuple, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_proto_xml(buf+size, len, tuple, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_proto_xml(buf+offset, len, tuple, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_ORIG_COUNTER_PACKETS, ct->set) &&
test_bit(ATTR_ORIG_COUNTER_BYTES, ct->set)) {
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_counters_xml(buf+size, len, ct, dir);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_counters_xml(buf+offset, len, ct, dir);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
@@ -262,7 +262,7 @@ int __snprintf_conntrack_xml(char *buf,
const unsigned int flags)
{
int ret = 0;
- unsigned int size = 0;
+ unsigned int size = 0, offset = 0;
switch(msg_type) {
case NFCT_T_NEW:
@@ -279,61 +279,61 @@ int __snprintf_conntrack_xml(char *buf,
break;
}
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_tuple_xml(buf+size, len, ct, __DIR_ORIG);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_tuple_xml(buf+offset, len, ct, __DIR_ORIG);
+ BUFFER_SIZE(ret, size, len, offset);
- ret = __snprintf_tuple_xml(buf+size, len, ct, __DIR_REPL);
- BUFFER_SIZE(ret, size, len);
+ ret = __snprintf_tuple_xml(buf+offset, len, ct, __DIR_REPL);
+ BUFFER_SIZE(ret, size, len, offset);
if (test_bit(ATTR_TIMEOUT, ct->set) ||
test_bit(ATTR_MARK, ct->set) ||
test_bit(ATTR_USE, ct->set) ||
test_bit(ATTR_STATUS, ct->set)) {
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"");
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_TIMEOUT, ct->set)) {
- ret = snprintf(buf+size, len,
+ ret = snprintf(buf+offset, len,
"%u", ct->timeout);
- BUFFER_SIZE(ret, size, len);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_MARK, ct->set)) {
- ret = snprintf(buf+size, len, "%u", ct->mark);
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "%u", ct->mark);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_USE, ct->set)) {
- ret = snprintf(buf+size, len, "", ct->use);
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "", ct->use);
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)
&& ct->status & IPS_ASSURED) {
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_STATUS, ct->set)
&& !(ct->status & IPS_SEEN_REPLY)) {
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
}
if (test_bit(ATTR_TIMEOUT, ct->set) ||
test_bit(ATTR_MARK, ct->set) ||
test_bit(ATTR_USE, ct->set) ||
test_bit(ATTR_STATUS, ct->set)) {
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
}
- ret = snprintf(buf+size, len, "");
- BUFFER_SIZE(ret, size, len);
+ ret = snprintf(buf+offset, len, "");
+ BUFFER_SIZE(ret, size, len, offset);
return size;
}
--
cgit v1.2.3