141edb306SCy Schubert
241edb306SCy Schubert /*
341edb306SCy Schubert * Copyright (C) 2012 by Darren Reed.
441edb306SCy Schubert *
541edb306SCy Schubert * See the IPFILTER.LICENCE file for details on licencing.
641edb306SCy Schubert */
741edb306SCy Schubert
841edb306SCy Schubert #include "ipf.h"
941edb306SCy Schubert
1041edb306SCy Schubert
1141edb306SCy Schubert ip_pool_t *
printpool(ip_pool_t * pp,copyfunc_t copyfunc,char * name,int opts,wordtab_t * fields)12efeb8bffSCy Schubert printpool(ip_pool_t *pp, copyfunc_t copyfunc, char *name, int opts,
13efeb8bffSCy Schubert wordtab_t *fields)
1441edb306SCy Schubert {
1541edb306SCy Schubert ip_pool_node_t *ipnp, *ipnpn, ipn, **pnext;
1641edb306SCy Schubert ip_pool_t ipp;
1741edb306SCy Schubert
1841edb306SCy Schubert if ((*copyfunc)(pp, &ipp, sizeof(ipp)))
19*2582ae57SCy Schubert return (NULL);
2041edb306SCy Schubert
2141edb306SCy Schubert if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN))
22*2582ae57SCy Schubert return (ipp.ipo_next);
2341edb306SCy Schubert
2441edb306SCy Schubert printpooldata(&ipp, opts);
2541edb306SCy Schubert
2641edb306SCy Schubert if ((ipp.ipo_flags & IPOOL_DELETE) != 0)
2741edb306SCy Schubert PRINTF("# ");
2841edb306SCy Schubert if ((opts & OPT_DEBUG) == 0)
2941edb306SCy Schubert PRINTF("\t{");
3041edb306SCy Schubert
3141edb306SCy Schubert ipnpn = ipp.ipo_list;
3241edb306SCy Schubert ipp.ipo_list = NULL;
3341edb306SCy Schubert pnext = &ipp.ipo_list;
3441edb306SCy Schubert while (ipnpn != NULL) {
3541edb306SCy Schubert ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp));
3641edb306SCy Schubert (*copyfunc)(ipnpn, ipnp, sizeof(ipn));
3741edb306SCy Schubert ipnpn = ipnp->ipn_next;
3841edb306SCy Schubert *pnext = ipnp;
3941edb306SCy Schubert pnext = &ipnp->ipn_next;
4041edb306SCy Schubert ipnp->ipn_next = NULL;
4141edb306SCy Schubert }
4241edb306SCy Schubert
4341edb306SCy Schubert if (ipp.ipo_list == NULL) {
4441edb306SCy Schubert putchar(';');
4541edb306SCy Schubert } else {
4641edb306SCy Schubert for (ipnp = ipp.ipo_list; ipnp != NULL; ipnp = ipnpn) {
4741edb306SCy Schubert ipnpn = printpoolnode(ipnp, opts, fields);
4841edb306SCy Schubert free(ipnp);
4941edb306SCy Schubert
5041edb306SCy Schubert if ((opts & OPT_DEBUG) == 0) {
5141edb306SCy Schubert putchar(';');
5241edb306SCy Schubert }
5341edb306SCy Schubert }
5441edb306SCy Schubert }
5541edb306SCy Schubert
5641edb306SCy Schubert if ((opts & OPT_DEBUG) == 0)
5741edb306SCy Schubert PRINTF(" };\n");
5841edb306SCy Schubert
59*2582ae57SCy Schubert return (ipp.ipo_next);
6041edb306SCy Schubert }
61