root/sbin/ipf/libipf/printdstlist.c
/*
 * Copyright (C) 2012 by Darren Reed.
 *
 * See the IPFILTER.LICENCE file for details on licencing.
 */

#include "ipf.h"


ippool_dst_t *
printdstlist( ippool_dst_t *pp, copyfunc_t copyfunc, char *name, int opts,
        ipf_dstnode_t *nodes, wordtab_t *fields)
{
        ipf_dstnode_t *node;
        ippool_dst_t dst;

        if ((*copyfunc)(pp, &dst, sizeof(dst)))
                return (NULL);

        if ((name != NULL) && strncmp(name, dst.ipld_name, FR_GROUPLEN))
                return (dst.ipld_next);

        if (fields == NULL)
                printdstlistdata(&dst, opts);

        if ((dst.ipld_flags & IPDST_DELETE) != 0)
                PRINTF("# ");
        if ((opts & OPT_DEBUG) == 0)
                PRINTF("\t{");

        if (nodes == NULL) {
                putchar(';');
        } else {
                for (node = nodes; node != NULL; ) {
                        ipf_dstnode_t *n;

                        n = calloc(1, node->ipfd_size);
                        if (n == NULL)
                                break;
                        if ((*copyfunc)(node, n, node->ipfd_size)) {
                                free(n);
                                return (NULL);
                        }

                        if (opts & OPT_SAVEOUT)
                                PRINTF("\t");
                        node = printdstlistnode(n, bcopywrap, opts, fields);

                        free(n);
                }
        }

        if ((opts & OPT_DEBUG) == 0)
                PRINTF(" };\n");

        return (dst.ipld_next);
}