summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/printhash_live.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/printhash_live.c')
-rw-r--r--contrib/ipfilter/lib/printhash_live.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/contrib/ipfilter/lib/printhash_live.c b/contrib/ipfilter/lib/printhash_live.c
index 1afe632..53159b1 100644
--- a/contrib/ipfilter/lib/printhash_live.c
+++ b/contrib/ipfilter/lib/printhash_live.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2002 by Darren Reed.
+ * Copyright (C) 2012 by Darren Reed.
*
* See the IPFILTER.LICENCE file for details on licencing.
*/
@@ -8,25 +8,25 @@
#include "ipf.h"
#include "netinet/ipl.h"
-#define PRINTF (void)printf
-#define FPRINTF (void)fprintf
-
-iphtable_t *printhash_live(hp, fd, name, opts)
-iphtable_t *hp;
-int fd;
-char *name;
-int opts;
+iphtable_t *
+printhash_live(hp, fd, name, opts, fields)
+ iphtable_t *hp;
+ int fd;
+ char *name;
+ int opts;
+ wordtab_t *fields;
{
- iphtent_t entry, *top, *node;
+ iphtent_t entry, zero;
ipflookupiter_t iter;
- int printed, last;
+ int last, printed;
ipfobj_t obj;
if ((name != NULL) && strncmp(name, hp->iph_name, FR_GROUPLEN))
return hp->iph_next;
- printhashdata(hp, opts);
+ if (fields == NULL)
+ printhashdata(hp, opts);
if ((hp->iph_flags & IPHASH_DELETE) != 0)
PRINTF("# ");
@@ -47,26 +47,19 @@ int opts;
strncpy(iter.ili_name, hp->iph_name, FR_GROUPLEN);
last = 0;
- top = NULL;
printed = 0;
+ bzero((char *)&zero, sizeof(zero));
while (!last && (ioctl(fd, SIOCLOOKUPITER, &obj) == 0)) {
if (entry.ipe_next == NULL)
last = 1;
- entry.ipe_next = top;
- top = malloc(sizeof(*top));
- if (top == NULL)
+ if (bcmp(&zero, &entry, sizeof(zero)) == 0)
break;
- bcopy(&entry, top, sizeof(entry));
- }
-
- while (top != NULL) {
- node = top;
- (void) printhashnode(hp, node, bcopywrap, opts);
- top = node->ipe_next;
- free(node);
+ (void) printhashnode(hp, &entry, bcopywrap, opts, fields);
printed++;
}
+ if (last == 0)
+ ipferror(fd, "walking hash nodes:");
if (printed == 0)
putchar(';');
OpenPOWER on IntegriCloud