xref: /freebsd-src/sbin/ipf/libipf/printpool.c (revision 2a63c3be158216222d89a073dcbd6a72ee4aab5a)
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