printhash.c revision 170268
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/printhash.c 170268 2007-06-04 02:54:36Z darrenr $ */ 2145510Sdarrenr 3145510Sdarrenr/* 4170268Sdarrenr * Copyright (C) 2002-2005 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr */ 8145510Sdarrenr 9145510Sdarrenr#include "ipf.h" 10145510Sdarrenr 11145510Sdarrenr#define PRINTF (void)printf 12145510Sdarrenr#define FPRINTF (void)fprintf 13145510Sdarrenr 14145510Sdarrenr 15145510Sdarrenriphtable_t *printhash(hp, copyfunc, name, opts) 16145510Sdarrenriphtable_t *hp; 17145510Sdarrenrcopyfunc_t copyfunc; 18145510Sdarrenrchar *name; 19145510Sdarrenrint opts; 20145510Sdarrenr{ 21145510Sdarrenr iphtent_t *ipep, **table; 22145510Sdarrenr iphtable_t iph; 23170268Sdarrenr int printed; 24145510Sdarrenr size_t sz; 25145510Sdarrenr 26145510Sdarrenr if ((*copyfunc)((char *)hp, (char *)&iph, sizeof(iph))) 27145510Sdarrenr return NULL; 28145510Sdarrenr 29145510Sdarrenr if ((name != NULL) && strncmp(name, iph.iph_name, FR_GROUPLEN)) 30145510Sdarrenr return iph.iph_next; 31145510Sdarrenr 32170268Sdarrenr printhashdata(hp, opts); 33145510Sdarrenr 34170268Sdarrenr if ((hp->iph_flags & IPHASH_DELETE) != 0) 35170268Sdarrenr PRINTF("# "); 36145510Sdarrenr 37145510Sdarrenr if ((opts & OPT_DEBUG) == 0) 38145510Sdarrenr PRINTF("\t{"); 39145510Sdarrenr 40145510Sdarrenr sz = iph.iph_size * sizeof(*table); 41145510Sdarrenr table = malloc(sz); 42145510Sdarrenr if ((*copyfunc)((char *)iph.iph_table, (char *)table, sz)) 43145510Sdarrenr return NULL; 44145510Sdarrenr 45170268Sdarrenr for (printed = 0, ipep = iph.iph_list; ipep != NULL; ) { 46170268Sdarrenr ipep = printhashnode(&iph, ipep, copyfunc, opts); 47170268Sdarrenr printed++; 48145510Sdarrenr } 49145510Sdarrenr if (printed == 0) 50145510Sdarrenr putchar(';'); 51145510Sdarrenr 52145510Sdarrenr free(table); 53145510Sdarrenr 54145510Sdarrenr if ((opts & OPT_DEBUG) == 0) 55145510Sdarrenr PRINTF(" };\n"); 56145510Sdarrenr 57145510Sdarrenr return iph.iph_next; 58145510Sdarrenr} 59