1 /* $FreeBSD$ */ 2 3 /* 4 * Copyright (C) 2012 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8 9 #include "ipf.h" 10 11 12 ip_pool_t * 13 printpool(pp, copyfunc, name, opts, fields) 14 ip_pool_t *pp; 15 copyfunc_t copyfunc; 16 char *name; 17 int opts; 18 wordtab_t *fields; 19 { 20 ip_pool_node_t *ipnp, *ipnpn, ipn, **pnext; 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 pnext = &ipp.ipo_list; 39 while (ipnpn != NULL) { 40 ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp)); 41 (*copyfunc)(ipnpn, ipnp, sizeof(ipn)); 42 ipnpn = ipnp->ipn_next; 43 *pnext = ipnp; 44 pnext = &ipnp->ipn_next; 45 ipnp->ipn_next = NULL; 46 } 47 48 if (ipp.ipo_list == NULL) { 49 putchar(';'); 50 } else { 51 for (ipnp = ipp.ipo_list; ipnp != NULL; ipnp = ipnpn) { 52 ipnpn = printpoolnode(ipnp, opts, fields); 53 free(ipnp); 54 55 if ((opts & OPT_DEBUG) == 0) { 56 putchar(';'); 57 } 58 } 59 } 60 61 if ((opts & OPT_DEBUG) == 0) 62 PRINTF(" };\n"); 63 64 return ipp.ipo_next; 65 } 66