1 1.1 christos /* $NetBSD: printhash.c,v 1.1.1.2 2012/07/22 13:44:40 darrenr Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.1.1.2 darrenr * Copyright (C) 2012 by Darren Reed. 5 1.1 christos * 6 1.1 christos * See the IPFILTER.LICENCE file for details on licencing. 7 1.1 christos */ 8 1.1 christos 9 1.1 christos #include "ipf.h" 10 1.1 christos 11 1.1 christos 12 1.1 christos iphtable_t * 13 1.1 christos printhash(hp, copyfunc, name, opts, fields) 14 1.1 christos iphtable_t *hp; 15 1.1 christos copyfunc_t copyfunc; 16 1.1 christos char *name; 17 1.1 christos int opts; 18 1.1 christos wordtab_t *fields; 19 1.1 christos { 20 1.1 christos iphtent_t *ipep, **table; 21 1.1 christos iphtable_t iph; 22 1.1 christos int printed; 23 1.1 christos size_t sz; 24 1.1 christos 25 1.1 christos if ((*copyfunc)((char *)hp, (char *)&iph, sizeof(iph))) 26 1.1 christos return NULL; 27 1.1 christos 28 1.1 christos if ((name != NULL) && strncmp(name, iph.iph_name, FR_GROUPLEN)) 29 1.1 christos return iph.iph_next; 30 1.1 christos 31 1.1 christos if (fields == NULL) 32 1.1 christos printhashdata(hp, opts); 33 1.1 christos 34 1.1 christos if ((hp->iph_flags & IPHASH_DELETE) != 0) 35 1.1 christos PRINTF("# "); 36 1.1 christos 37 1.1 christos if ((opts & OPT_DEBUG) == 0) 38 1.1 christos PRINTF("\t{"); 39 1.1 christos 40 1.1 christos sz = iph.iph_size * sizeof(*table); 41 1.1 christos table = malloc(sz); 42 1.1 christos if ((*copyfunc)((char *)iph.iph_table, (char *)table, sz)) 43 1.1 christos return NULL; 44 1.1 christos 45 1.1 christos for (printed = 0, ipep = iph.iph_list; ipep != NULL; ) { 46 1.1 christos ipep = printhashnode(&iph, ipep, copyfunc, opts, fields); 47 1.1 christos printed++; 48 1.1 christos } 49 1.1 christos if (printed == 0) 50 1.1 christos putchar(';'); 51 1.1 christos 52 1.1 christos free(table); 53 1.1 christos 54 1.1 christos if ((opts & OPT_DEBUG) == 0) 55 1.1 christos PRINTF(" };\n"); 56 1.1 christos 57 1.1 christos return iph.iph_next; 58 1.1 christos } 59