printdstlist.c revision 303975
1/* 2 * Copyright (C) 2012 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 */ 6 7#include "ipf.h" 8 9 10ippool_dst_t * 11printdstlist(pp, copyfunc, name, opts, nodes, fields) 12 ippool_dst_t *pp; 13 copyfunc_t copyfunc; 14 char *name; 15 int opts; 16 ipf_dstnode_t *nodes; 17 wordtab_t *fields; 18{ 19 ipf_dstnode_t *node; 20 ippool_dst_t dst; 21 22 if ((*copyfunc)(pp, &dst, sizeof(dst))) 23 return NULL; 24 25 if ((name != NULL) && strncmp(name, dst.ipld_name, FR_GROUPLEN)) 26 return dst.ipld_next; 27 28 if (fields == NULL) 29 printdstlistdata(&dst, opts); 30 31 if ((dst.ipld_flags & IPDST_DELETE) != 0) 32 PRINTF("# "); 33 if ((opts & OPT_DEBUG) == 0) 34 PRINTF("\t{"); 35 36 if (nodes == NULL) { 37 putchar(';'); 38 } else { 39 for (node = nodes; node != NULL; ) { 40 ipf_dstnode_t *n; 41 42 n = calloc(1, node->ipfd_size); 43 if (n == NULL) 44 break; 45 if ((*copyfunc)(node, n, node->ipfd_size)) { 46 free(n); 47 return NULL; 48 } 49 50 node = printdstlistnode(n, bcopywrap, opts, fields); 51 52 free(n); 53 } 54 } 55 56 if ((opts & OPT_DEBUG) == 0) 57 PRINTF(" };\n"); 58 59 return dst.ipld_next; 60} 61