printpool.c revision 170268
1/* $FreeBSD: head/contrib/ipfilter/lib/printpool.c 170268 2007-06-04 02:54:36Z darrenr $ */ 2 3/* 4 * Copyright (C) 2002-2005 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8 9#include "ipf.h" 10 11#define PRINTF (void)printf 12#define FPRINTF (void)fprintf 13 14ip_pool_t *printpool(pp, copyfunc, name, opts) 15ip_pool_t *pp; 16copyfunc_t copyfunc; 17char *name; 18int opts; 19{ 20 ip_pool_node_t *ipnp, *ipnpn, ipn; 21 ip_pool_t ipp; 22 23 if ((*copyfunc)(pp, &ipp, sizeof(ipp))) 24 return NULL; 25 26 if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN)) 27 return ipp.ipo_next; 28 29 printpooldata(&ipp, opts); 30 31 if ((ipp.ipo_flags & IPOOL_DELETE) != 0) 32 PRINTF("# "); 33 if ((opts & OPT_DEBUG) == 0) 34 PRINTF("\t{"); 35 36 ipnpn = ipp.ipo_list; 37 ipp.ipo_list = NULL; 38 while (ipnpn != NULL) { 39 ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp)); 40 (*copyfunc)(ipnpn, ipnp, sizeof(ipn)); 41 ipnpn = ipnp->ipn_next; 42 ipnp->ipn_next = ipp.ipo_list; 43 ipp.ipo_list = ipnp; 44 } 45 46 if (ipp.ipo_list == NULL) { 47 putchar(';'); 48 } else { 49 for (ipnp = ipp.ipo_list; ipnp != NULL; ) { 50 ipnp = printpoolnode(ipnp, opts); 51 52 if ((opts & OPT_DEBUG) == 0) { 53 putchar(';'); 54 } 55 } 56 } 57 58 if ((opts & OPT_DEBUG) == 0) 59 PRINTF(" };\n"); 60 61 return ipp.ipo_next; 62} 63