]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1297. [func] You can now create your own customised printing
authorMark Andrews <marka@isc.org>
Tue, 21 May 2002 06:12:45 +0000 (06:12 +0000)
committerMark Andrews <marka@isc.org>
Tue, 21 May 2002 06:12:45 +0000 (06:12 +0000)
                        styles: dns_master_stylecreate() and
                        dns_master_styledestroy().

CHANGES
lib/dns/include/dns/masterdump.h
lib/dns/masterdump.c

diff --git a/CHANGES b/CHANGES
index 61c909d32ef7214a1646821263938d67b54b8b79..1c13fafce43f7b9f600a9937894d9caa3a4a2349 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+1297.  [func]          You can now create your own customised printing
+                       styles: dns_master_stylecreate() and
+                       dns_master_styledestroy().
+
 1296.  [bug]           libbind: const pointer conficts in res_debug.c.
 
 1295.  [port]          libbind: hpux: treat all hpux systems as BIG_ENDIAN.
index d779525df90729f5addc2bda0691fa7976f66ab6..17687afdb58e2d1b961dbd38bace0af930779660 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: masterdump.h,v 1.27 2002/02/20 03:34:31 marka Exp $ */
+/* $Id: masterdump.h,v 1.28 2002/05/21 06:12:45 marka Exp $ */
 
 #ifndef DNS_MASTERDUMP_H
 #define DNS_MASTERDUMP_H 1
  *** Types
  ***/
 
+typedef struct dns_master_style dns_master_style_t;
+
+/***
+ *** Definitions
+ ***/
+
 /*
- * Style options for masterfile dumps.  This struct is currently
- * opaque, so applications cannot define their own style but have
- * to choose a predefined style.  A more flexible interface may
- * be exported in the future.
+ * Flags affecting master file formatting.  Flags 0x0000FFFF
+ * define the formatting of the rdata part and are defined in
+ * rdata.h.
  */
 
-typedef struct dns_master_style dns_master_style_t;
+/* Omit the owner name when possible. */
+#define        DNS_STYLEFLAG_OMIT_OWNER        0x00010000U
+
+/*
+ * Omit the TTL when possible.  If DNS_STYLEFLAG_TTL is
+ * also set, this means no TTLs are ever printed
+ * because $TTL directives are generated before every
+ * change in the TTL.  In this case, no columns need to
+ * be reserved for the TTL.  Master files generated with
+ * these options will be rejected by BIND 4.x because it
+ * does not recognize the $TTL directive.
+ *
+ * If DNS_STYLEFLAG_TTL is not also set, the TTL will be
+ * omitted when it is equal to the previous TTL.
+ * This is correct according to RFC1035, but the
+ * TTLs may be silently misinterpreted by older
+ * versions of BIND which use the SOA MINTTL as a
+ * default TTL value.
+ */
+#define        DNS_STYLEFLAG_OMIT_TTL          0x00020000U
+
+/* Omit the class when possible. */
+#define        DNS_STYLEFLAG_OMIT_CLASS        0x00040000U
+
+/* Output $TTL directives. */
+#define        DNS_STYLEFLAG_TTL               0x00080000U
+
+/*
+ * Output $ORIGIN directives and print owner names relative to
+ * the origin when possible.
+ */
+#define        DNS_STYLEFLAG_REL_OWNER         0x00100000U
+
+/* Print domain names in RR data in relative form when possible.
+   For this to take effect, DNS_STYLEFLAG_REL_OWNER must also be set. */
+#define        DNS_STYLEFLAG_REL_DATA          0x00200000U
+
+/* Print the trust level of each rdataset. */
+#define        DNS_STYLEFLAG_TRUST             0x00400000U
+
+/* Print negative caching entries. */
+#define        DNS_STYLEFLAG_NCACHE            0x00800000U
+
+/* Never print the TTL */
+#define        DNS_STYLEFLAG_NO_TTL            0x01000000U
+                    
+/* Never print the CLASS */
+#define        DNS_STYLEFLAG_NO_CLASS          0x02000000U 
 
 ISC_LANG_BEGINDECLS
 
@@ -230,6 +282,16 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
                    dns_dbnode_t *node, dns_name_t *name,
                    const dns_master_style_t *style, const char *filename);
 
+isc_result_t
+dns_master_stylecreate(dns_master_style_t **style, unsigned int flags,
+                      unsigned int ttl_column, unsigned int class_column,
+                      unsigned int type_column, unsigned int rdata_column,
+                      unsigned int line_length, unsigned int tab_width,
+                      isc_mem_t *mctx);
+
+void
+dns_master_styledestroy(dns_master_style_t **style, isc_mem_t *mctx);
+
 ISC_LANG_ENDDECLS
 
 #endif /* DNS_MASTERDUMP_H */
index d0e5b0ccccdbe113e9fb6a0af56730d8355fe5a8..bfae35b290cbb382726d0f708c2a4f06e1c5cad6 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: masterdump.c,v 1.64 2001/11/19 21:34:31 gson Exp $ */
+/* $Id: masterdump.c,v 1.65 2002/05/21 06:12:44 marka Exp $ */
 
 #include <config.h>
 
@@ -64,56 +64,6 @@ struct dns_master_style {
        unsigned int tab_width;
 };
 
-/*
- * Flags affecting master file formatting.  Flags 0x0000FFFF
- * define the formatting of the rdata part and are defined in
- * rdata.h.
- */
-
-/* Omit the owner name when possible. */
-#define DNS_STYLEFLAG_OMIT_OWNER       0x00010000U
-
-/*
- * Omit the TTL when possible.  If DNS_STYLEFLAG_TTL is
- * also set, this means no TTLs are ever printed
- * because $TTL directives are generated before every
- * change in the TTL.  In this case, no columns need to
- * be reserved for the TTL.  Master files generated with
- * these options will be rejected by BIND 4.x because it
- * does not recognize the $TTL directive.
- *
- * If DNS_STYLEFLAG_TTL is not also set, the TTL will be
- * omitted when it is equal to the previous TTL.
- * This is correct according to RFC1035, but the
- * TTLs may be silently misinterpreted by older
- * versions of BIND which use the SOA MINTTL as a
- * default TTL value.
- */
-#define DNS_STYLEFLAG_OMIT_TTL         0x00020000U
-
-/* Omit the class when possible. */
-#define DNS_STYLEFLAG_OMIT_CLASS       0x00040000U
-
-/* Output $TTL directives. */
-#define DNS_STYLEFLAG_TTL              0x00080000U
-
-/*
- * Output $ORIGIN directives and print owner names relative to
- * the origin when possible.
- */
-#define DNS_STYLEFLAG_REL_OWNER                0x00100000U
-
-/* Print domain names in RR data in relative form when possible.
-   For this to take effect, DNS_STYLEFLAG_REL_OWNER must also be set. */
-#define DNS_STYLEFLAG_REL_DATA         0x00200000U
-
-/* Print the trust level of each rdataset. */
-#define DNS_STYLEFLAG_TRUST            0x00400000U
-
-/* Print negative caching entries. */
-#define DNS_STYLEFLAG_NCACHE           0x00800000U
-
-
 /*
  * The maximum length of the newline+indentation that is output
  * when inserting a line break in an RR.  This effectively puts an
@@ -176,7 +126,6 @@ dns_master_style_simple = {
        24, 32, 32, 40, 80, 8
 };
 
-
 /*
  * A style suitable for dns_rdataset_totext().
  */
@@ -414,9 +363,10 @@ rdataset_totext(dns_rdataset_t *rdataset,
                /*
                 * TTL.
                 */
-               if (! ((ctx->style.flags & DNS_STYLEFLAG_OMIT_TTL) != 0 &&
-                      current_ttl_valid &&
-                      rdataset->ttl == current_ttl))
+               if ((ctx->style.flags & DNS_STYLEFLAG_NO_TTL) == 0 &&
+                   !((ctx->style.flags & DNS_STYLEFLAG_OMIT_TTL) != 0 &&
+                     current_ttl_valid &&
+                     rdataset->ttl == current_ttl))
                {
                        char ttlbuf[64];
                        isc_region_t r;
@@ -445,8 +395,9 @@ rdataset_totext(dns_rdataset_t *rdataset,
                /*
                 * Class.
                 */
-               if ((ctx->style.flags & DNS_STYLEFLAG_OMIT_CLASS) == 0 ||
-                   ctx->class_printed == ISC_FALSE)
+               if ((ctx->style.flags & DNS_STYLEFLAG_NO_CLASS) == 0 &&
+                   ((ctx->style.flags & DNS_STYLEFLAG_OMIT_CLASS) == 0 ||
+                    ctx->class_printed == ISC_FALSE))
                {
                        unsigned int class_start;
                        INDENT_TO(class_column);
@@ -1443,3 +1394,40 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
 
        return (result);
 }
+
+isc_result_t
+dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags,
+                       unsigned int ttl_column, unsigned int class_column,
+                       unsigned int type_column, unsigned int rdata_column,
+                       unsigned int line_length, unsigned int tab_width,
+                       isc_mem_t *mctx)
+{
+       dns_master_style_t *style;
+
+       REQUIRE(stylep != NULL && *stylep == NULL);
+       style = isc_mem_get(mctx, sizeof(*style));
+       if (style == NULL)
+               return (ISC_R_NOMEMORY);
+
+       style->flags = flags;
+       style->ttl_column = ttl_column;
+       style->class_column = class_column;
+       style->type_column = type_column;
+       style->rdata_column = rdata_column;
+       style->line_length = line_length;
+       style->tab_width = tab_width;
+
+       *stylep = style;
+       return (ISC_R_SUCCESS);
+}
+
+void
+dns_master_styledestroy(dns_master_style_t **stylep, isc_mem_t *mctx) {
+       dns_master_style_t *style;
+
+       REQUIRE(stylep != NULL && *stylep != NULL);
+       style = *stylep;
+       *stylep = NULL;
+       isc_mem_put(mctx, style, sizeof(*style));
+}
+