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