1 /* $NetBSD: printdstlist.c,v 1.1.1.2 2012/07/22 13:44:40 darrenr Exp $ */ 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 ippool_dst_t * 13 printdstlist(pp, copyfunc, name, opts, nodes, fields) 14 ippool_dst_t *pp; 15 copyfunc_t copyfunc; 16 char *name; 17 int opts; 18 ipf_dstnode_t *nodes; 19 wordtab_t *fields; 20 { 21 ipf_dstnode_t *node; 22 ippool_dst_t dst; 23 24 if ((*copyfunc)(pp, &dst, sizeof(dst))) 25 return NULL; 26 27 if ((name != NULL) && strncmp(name, dst.ipld_name, FR_GROUPLEN)) 28 return dst.ipld_next; 29 30 if (fields == NULL) 31 printdstlistdata(&dst, opts); 32 33 if ((dst.ipld_flags & IPDST_DELETE) != 0) 34 PRINTF("# "); 35 if ((opts & OPT_DEBUG) == 0) 36 PRINTF("\t{"); 37 38 if (nodes == NULL) { 39 putchar(';'); 40 } else { 41 for (node = nodes; node != NULL; ) { 42 ipf_dstnode_t *n; 43 44 n = calloc(1, node->ipfd_size); 45 if (n == NULL) 46 break; 47 if ((*copyfunc)(node, n, node->ipfd_size)) { 48 free(n); 49 return NULL; 50 } 51 52 node = printdstlistnode(n, bcopywrap, opts, fields); 53 54 free(n); 55 } 56 } 57 58 if ((opts & OPT_DEBUG) == 0) 59 PRINTF(" };\n"); 60 61 return dst.ipld_next; 62 } 63