summaryrefslogtreecommitdiffstats
path: root/contrib/bind9/lib/dns/gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bind9/lib/dns/gen.c')
-rw-r--r--contrib/bind9/lib/dns/gen.c884
1 files changed, 0 insertions, 884 deletions
diff --git a/contrib/bind9/lib/dns/gen.c b/contrib/bind9/lib/dns/gen.c
deleted file mode 100644
index 1e6212a..0000000
--- a/contrib/bind9/lib/dns/gen.c
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
- * Copyright (C) 2004-2006 Internet Systems Consortium, Inc. ("ISC")
- * Copyright (C) 1998-2003 Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* $Id: gen.c,v 1.73.18.6 2006/10/02 06:36:43 marka Exp $ */
-
-/*! \file */
-
-#ifdef WIN32
-/*
- * Silence compiler warnings about using strcpy and friends.
- */
-#define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#ifdef WIN32
-#include "gen-win32.h"
-#else
-#include "gen-unix.h"
-#endif
-
-#define FROMTEXTARGS "rdclass, type, lexer, origin, options, target, callbacks"
-#define FROMTEXTCLASS "rdclass"
-#define FROMTEXTTYPE "type"
-#define FROMTEXTDEF "result = DNS_R_UNKNOWN"
-
-#define TOTEXTARGS "rdata, tctx, target"
-#define TOTEXTCLASS "rdata->rdclass"
-#define TOTEXTTYPE "rdata->type"
-#define TOTEXTDEF "use_default = ISC_TRUE"
-
-#define FROMWIREARGS "rdclass, type, source, dctx, options, target"
-#define FROMWIRECLASS "rdclass"
-#define FROMWIRETYPE "type"
-#define FROMWIREDEF "use_default = ISC_TRUE"
-
-#define TOWIREARGS "rdata, cctx, target"
-#define TOWIRECLASS "rdata->rdclass"
-#define TOWIRETYPE "rdata->type"
-#define TOWIREDEF "use_default = ISC_TRUE"
-
-#define FROMSTRUCTARGS "rdclass, type, source, target"
-#define FROMSTRUCTCLASS "rdclass"
-#define FROMSTRUCTTYPE "type"
-#define FROMSTRUCTDEF "use_default = ISC_TRUE"
-
-#define TOSTRUCTARGS "rdata, target, mctx"
-#define TOSTRUCTCLASS "rdata->rdclass"
-#define TOSTRUCTTYPE "rdata->type"
-#define TOSTRUCTDEF "use_default = ISC_TRUE"
-
-#define FREESTRUCTARGS "source"
-#define FREESTRUCTCLASS "common->rdclass"
-#define FREESTRUCTTYPE "common->rdtype"
-#define FREESTRUCTDEF NULL
-
-#define COMPAREARGS "rdata1, rdata2"
-#define COMPARECLASS "rdata1->rdclass"
-#define COMPARETYPE "rdata1->type"
-#define COMPAREDEF "use_default = ISC_TRUE"
-
-#define ADDITIONALDATAARGS "rdata, add, arg"
-#define ADDITIONALDATACLASS "rdata->rdclass"
-#define ADDITIONALDATATYPE "rdata->type"
-#define ADDITIONALDATADEF "use_default = ISC_TRUE"
-
-#define DIGESTARGS "rdata, digest, arg"
-#define DIGESTCLASS "rdata->rdclass"
-#define DIGESTTYPE "rdata->type"
-#define DIGESTDEF "use_default = ISC_TRUE"
-
-#define CHECKOWNERARGS "name, rdclass, type, wildcard"
-#define CHECKOWNERCLASS "rdclass"
-#define CHECKOWNERTYPE "type"
-#define CHECKOWNERDEF "result = ISC_TRUE"
-
-#define CHECKNAMESARGS "rdata, owner, bad"
-#define CHECKNAMESCLASS "rdata->rdclass"
-#define CHECKNAMESTYPE "rdata->type"
-#define CHECKNAMESDEF "result = ISC_TRUE"
-
-const char copyright[] =
-"/*\n"
-" * Copyright (C) 2004%s Internet Systems Consortium, Inc. (\"ISC\")\n"
-" * Copyright (C) 1998-2003 Internet Software Consortium.\n"
-" *\n"
-" * Permission to use, copy, modify, and distribute this software for any\n"
-" * purpose with or without fee is hereby granted, provided that the above\n"
-" * copyright notice and this permission notice appear in all copies.\n"
-" *\n"
-" * THE SOFTWARE IS PROVIDED \"AS IS\" AND ISC DISCLAIMS ALL WARRANTIES WITH\n"
-" * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n"
-" * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,\n"
-" * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n"
-" * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n"
-" * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n"
-" * PERFORMANCE OF THIS SOFTWARE.\n"
-" */\n"
-"\n"
-"/***************\n"
-" ***************\n"
-" *************** THIS FILE IS AUTOMATICALLY GENERATED BY gen.c.\n"
-" *************** DO NOT EDIT!\n"
-" ***************\n"
-" ***************/\n"
-"\n"
-"/*! \\file */\n"
-"\n";
-
-#define TYPENAMES 256
-
-struct cc {
- struct cc *next;
- int rdclass;
- char classname[11];
-} *classes;
-
-struct tt {
- struct tt *next;
- int rdclass;
- int type;
- char classname[11];
- char typename[11];
- char dirname[256]; /* XXX Should be max path length */
-} *types;
-
-struct ttnam {
- char typename[11];
- char macroname[11];
- char attr[256];
- unsigned int sorted;
- int type;
-} typenames[TYPENAMES];
-
-int maxtype = -1;
-
-char *
-upper(char *);
-char *
-funname(const char *, char *);
-void
-doswitch(const char *, const char *, const char *, const char *,
- const char *, const char *);
-void
-dodecl(char *, char *, char *);
-void
-add(int, const char *, int, const char *, const char *);
-void
-sd(int, const char *, const char *, char);
-void
-insert_into_typenames(int, const char *, const char *);
-
-/*%
- * If you use more than 10 of these in, say, a printf(), you'll have problems.
- */
-char *
-upper(char *s) {
- static int buf_to_use = 0;
- static char buf[10][256];
- char *b;
- int c;
-
- buf_to_use++;
- if (buf_to_use > 9)
- buf_to_use = 0;
-
- b = buf[buf_to_use];
- memset(b, 0, 256);
-
- while ((c = (*s++) & 0xff))
- *b++ = islower(c) ? toupper(c) : c;
- *b = '\0';
- return (buf[buf_to_use]);
-}
-
-char *
-funname(const char *s, char *buf) {
- char *b = buf;
- char c;
-
- while ((c = *s++)) {
- *b++ = (c == '-') ? '_' : c;
- }
- *b = '\0';
- return (buf);
-}
-
-void
-doswitch(const char *name, const char *function, const char *args,
- const char *tsw, const char *csw, const char *res)
-{
- struct tt *tt;
- int first = 1;
- int lasttype = 0;
- int subswitch = 0;
- char buf1[11], buf2[11];
- const char *result = " result =";
-
- if (res == NULL)
- result = "";
-
- for (tt = types; tt != NULL; tt = tt->next) {
- if (first) {
- fprintf(stdout, "\n#define %s \\\n", name);
- fprintf(stdout, "\tswitch (%s) { \\\n" /*}*/, tsw);
- first = 0;
- }
- if (tt->type != lasttype && subswitch) {
- if (res == NULL)
- fprintf(stdout, "\t\tdefault: break; \\\n");
- else
- fprintf(stdout,
- "\t\tdefault: %s; break; \\\n", res);
- fputs(/*{*/ "\t\t} \\\n", stdout);
- fputs("\t\tbreak; \\\n", stdout);
- subswitch = 0;
- }
- if (tt->rdclass && tt->type != lasttype) {
- fprintf(stdout, "\tcase %d: switch (%s) { \\\n" /*}*/,
- tt->type, csw);
- subswitch = 1;
- }
- if (tt->rdclass == 0)
- fprintf(stdout,
- "\tcase %d:%s %s_%s(%s); break;",
- tt->type, result, function,
- funname(tt->typename, buf1), args);
- else
- fprintf(stdout,
- "\t\tcase %d:%s %s_%s_%s(%s); break;",
- tt->rdclass, result, function,
- funname(tt->classname, buf1),
- funname(tt->typename, buf2), args);
- fputs(" \\\n", stdout);
- lasttype = tt->type;
- }
- if (subswitch) {
- if (res == NULL)
- fprintf(stdout, "\t\tdefault: break; \\\n");
- else
- fprintf(stdout, "\t\tdefault: %s; break; \\\n", res);
- fputs(/*{*/ "\t\t} \\\n", stdout);
- fputs("\t\tbreak; \\\n", stdout);
- }
- if (first) {
- if (res == NULL)
- fprintf(stdout, "\n#define %s\n", name);
- else
- fprintf(stdout, "\n#define %s %s;\n", name, res);
- } else {
- if (res == NULL)
- fprintf(stdout, "\tdefault: break; \\\n");
- else
- fprintf(stdout, "\tdefault: %s; break; \\\n", res);
- fputs(/*{*/ "\t}\n", stdout);
- }
-}
-
-void
-dodecl(char *type, char *function, char *args) {
- struct tt *tt;
- char buf1[11], buf2[11];
-
- fputs("\n", stdout);
- for (tt = types; tt; tt = tt->next)
- if (tt->rdclass)
- fprintf(stdout,
- "static inline %s %s_%s_%s(%s);\n",
- type, function,
- funname(tt->classname, buf1),
- funname(tt->typename, buf2), args);
- else
- fprintf(stdout,
- "static inline %s %s_%s(%s);\n",
- type, function,
- funname(tt->typename, buf1), args);
-}
-
-static struct ttnam *
-find_typename(int type) {
- int i;
-
- for (i = 0; i < TYPENAMES; i++) {
- if (typenames[i].typename[0] != 0 &&
- typenames[i].type == type)
- return (&typenames[i]);
- }
- return (NULL);
-}
-
-void
-insert_into_typenames(int type, const char *typename, const char *attr) {
- struct ttnam *ttn = NULL;
- int c, i;
- char tmp[256];
-
- for (i = 0; i < TYPENAMES; i++) {
- if (typenames[i].typename[0] != 0 &&
- typenames[i].type == type &&
- strcmp(typename, typenames[i].typename) != 0) {
- fprintf(stderr,
- "Error: type %d has two names: %s, %s\n",
- type, typenames[i].typename, typename);
- exit(1);
- }
- if (typenames[i].typename[0] == 0 && ttn == NULL)
- ttn = &typenames[i];
- }
- if (ttn == NULL) {
- fprintf(stderr, "Error: typenames array too small\n");
- exit(1);
- }
-
- if (strlen(typename) > sizeof(ttn->typename) - 1) {
- fprintf(stderr, "Error: type name %s is too long\n",
- typename);
- exit(1);
- }
- strcpy(ttn->typename, typename);
- ttn->type = type;
-
- strcpy(ttn->macroname, ttn->typename);
- c = strlen(ttn->macroname);
- while (c > 0) {
- if (ttn->macroname[c - 1] == '-')
- ttn->macroname[c - 1] = '_';
- c--;
- }
-
- if (attr == NULL) {
- sprintf(tmp, "RRTYPE_%s_ATTRIBUTES", upper(ttn->macroname));
- attr = tmp;
- }
-
- if (ttn->attr[0] != 0 && strcmp(attr, ttn->attr) != 0) {
- fprintf(stderr, "Error: type %d has different attributes: "
- "%s, %s\n", type, ttn->attr, attr);
- exit(1);
- }
-
- if (strlen(attr) > sizeof(ttn->attr) - 1) {
- fprintf(stderr, "Error: attr (%s) [name %s] is too long\n",
- attr, typename);
- exit(1);
- }
- strcpy(ttn->attr, attr);
- ttn->sorted = 0;
- if (maxtype < type)
- maxtype = type;
-}
-
-void
-add(int rdclass, const char *classname, int type, const char *typename,
- const char *dirname)
-{
- struct tt *newtt = (struct tt *)malloc(sizeof(*newtt));
- struct tt *tt, *oldtt;
- struct cc *newcc;
- struct cc *cc, *oldcc;
-
- insert_into_typenames(type, typename, NULL);
-
- if (newtt == NULL) {
- fprintf(stderr, "malloc() failed\n");
- exit(1);
- }
-
- newtt->next = NULL;
- newtt->rdclass = rdclass;
- newtt->type = type;
- strcpy(newtt->classname, classname);
- strcpy(newtt->typename, typename);
- strcpy(newtt->dirname, dirname);
-
- tt = types;
- oldtt = NULL;
-
- while ((tt != NULL) && (tt->type < type)) {
- oldtt = tt;
- tt = tt->next;
- }
-
- while ((tt != NULL) && (tt->type == type) && (tt->rdclass < rdclass)) {
- if (strcmp(tt->typename, typename) != 0)
- exit(1);
- oldtt = tt;
- tt = tt->next;
- }
-
- if ((tt != NULL) && (tt->type == type) && (tt->rdclass == rdclass))
- exit(1);
-
- newtt->next = tt;
- if (oldtt != NULL)
- oldtt->next = newtt;
- else
- types = newtt;
-
- /*
- * Do a class switch for this type.
- */
- if (rdclass == 0)
- return;
-
- newcc = (struct cc *)malloc(sizeof(*newcc));
- newcc->rdclass = rdclass;
- strcpy(newcc->classname, classname);
- cc = classes;
- oldcc = NULL;
-
- while ((cc != NULL) && (cc->rdclass < rdclass)) {
- oldcc = cc;
- cc = cc->next;
- }
-
- if ((cc != NULL) && cc->rdclass == rdclass) {
- free((char *)newcc);
- return;
- }
-
- newcc->next = cc;
- if (oldcc != NULL)
- oldcc->next = newcc;
- else
- classes = newcc;
-}
-
-void
-sd(int rdclass, const char *classname, const char *dirname, char filetype) {
- char buf[sizeof("0123456789_65535.h")];
- char fmt[sizeof("%10[-0-9a-z]_%d.h")];
- int type;
- char typename[11];
- isc_dir_t dir;
-
- if (!start_directory(dirname, &dir))
- return;
-
- sprintf(fmt,"%s%c", "%10[-0-9a-z]_%d.", filetype);
- while (next_file(&dir)) {
- if (sscanf(dir.filename, fmt, typename, &type) != 2)
- continue;
- if ((type > 65535) || (type < 0))
- continue;
-
- sprintf(buf, "%s_%d.%c", typename, type, filetype);
- if (strcmp(buf, dir.filename) != 0)
- continue;
- add(rdclass, classname, type, typename, dirname);
- }
-
- end_directory(&dir);
-}
-
-static unsigned int
-HASH(char *string) {
- unsigned int n;
- unsigned char a, b;
-
- n = strlen(string);
- if (n == 0) {
- fprintf(stderr, "n == 0?\n");
- exit(1);
- }
- a = tolower((unsigned char)string[0]);
- b = tolower((unsigned char)string[n - 1]);
-
- return ((a + n) * b) % 256;
-}
-
-int
-main(int argc, char **argv) {
- char buf[256]; /* XXX Should be max path length */
- char srcdir[256]; /* XXX Should be max path length */
- int rdclass;
- char classname[11];
- struct tt *tt;
- struct cc *cc;
- struct ttnam *ttn, *ttn2;
- unsigned int hash;
- struct tm *tm;
- time_t now;
- char year[11];
- int lasttype;
- int code = 1;
- int class_enum = 0;
- int type_enum = 0;
- int structs = 0;
- int depend = 0;
- int c, i, j;
- char buf1[11];
- char filetype = 'c';
- FILE *fd;
- char *prefix = NULL;
- char *suffix = NULL;
- char *file = NULL;
- isc_dir_t dir;
-
- for (i = 0; i < TYPENAMES; i++)
- memset(&typenames[i], 0, sizeof(typenames[i]));
-
- strcpy(srcdir, "");
- while ((c = isc_commandline_parse(argc, argv, "cdits:F:P:S:")) != -1)
- switch (c) {
- case 'c':
- code = 0;
- depend = 0;
- type_enum = 0;
- class_enum = 1;
- filetype = 'c';
- structs = 0;
- break;
- case 'd':
- code = 0;
- depend = 1;
- class_enum = 0;
- type_enum = 0;
- structs = 0;
- filetype = 'h';
- break;
- case 't':
- code = 0;
- depend = 0;
- class_enum = 0;
- type_enum = 1;
- filetype = 'c';
- structs = 0;
- break;
- case 'i':
- code = 0;
- depend = 0;
- class_enum = 0;
- type_enum = 0;
- structs = 1;
- filetype = 'h';
- break;
- case 's':
- sprintf(srcdir, "%s/", isc_commandline_argument);
- break;
- case 'F':
- file = isc_commandline_argument;
- break;
- case 'P':
- prefix = isc_commandline_argument;
- break;
- case 'S':
- suffix = isc_commandline_argument;
- break;
- case '?':
- exit(1);
- }
-
- sprintf(buf, "%srdata", srcdir);
-
- if (!start_directory(buf, &dir))
- exit(1);
-
- while (next_file(&dir)) {
- if (sscanf(dir.filename, "%10[0-9a-z]_%d",
- classname, &rdclass) != 2)
- continue;
- if ((rdclass > 65535) || (rdclass < 0))
- continue;
-
- sprintf(buf, "%srdata/%s_%d", srcdir, classname, rdclass);
- if (strcmp(buf + 6 + strlen(srcdir), dir.filename) != 0)
- continue;
- sd(rdclass, classname, buf, filetype);
- }
- end_directory(&dir);
- sprintf(buf, "%srdata/generic", srcdir);
- sd(0, "", buf, filetype);
-
- if (time(&now) != -1) {
- if ((tm = localtime(&now)) != NULL && tm->tm_year > 104)
- sprintf(year, "-%d", tm->tm_year + 1900);
- else
- year[0] = 0;
- } else
- year[0] = 0;
-
- if (!depend) fprintf(stdout, copyright, year);
-
- if (code) {
- fputs("#ifndef DNS_CODE_H\n", stdout);
- fputs("#define DNS_CODE_H 1\n\n", stdout);
-
- fputs("#include <isc/boolean.h>\n", stdout);
- fputs("#include <isc/result.h>\n\n", stdout);
- fputs("#include <dns/name.h>\n\n", stdout);
-
- for (tt = types; tt != NULL; tt = tt->next)
- fprintf(stdout, "#include \"%s/%s_%d.c\"\n",
- tt->dirname, tt->typename, tt->type);
-
- fputs("\n\n", stdout);
-
- doswitch("FROMTEXTSWITCH", "fromtext", FROMTEXTARGS,
- FROMTEXTTYPE, FROMTEXTCLASS, FROMTEXTDEF);
- doswitch("TOTEXTSWITCH", "totext", TOTEXTARGS,
- TOTEXTTYPE, TOTEXTCLASS, TOTEXTDEF);
- doswitch("FROMWIRESWITCH", "fromwire", FROMWIREARGS,
- FROMWIRETYPE, FROMWIRECLASS, FROMWIREDEF);
- doswitch("TOWIRESWITCH", "towire", TOWIREARGS,
- TOWIRETYPE, TOWIRECLASS, TOWIREDEF);
- doswitch("COMPARESWITCH", "compare", COMPAREARGS,
- COMPARETYPE, COMPARECLASS, COMPAREDEF);
- doswitch("FROMSTRUCTSWITCH", "fromstruct", FROMSTRUCTARGS,
- FROMSTRUCTTYPE, FROMSTRUCTCLASS, FROMSTRUCTDEF);
- doswitch("TOSTRUCTSWITCH", "tostruct", TOSTRUCTARGS,
- TOSTRUCTTYPE, TOSTRUCTCLASS, TOSTRUCTDEF);
- doswitch("FREESTRUCTSWITCH", "freestruct", FREESTRUCTARGS,
- FREESTRUCTTYPE, FREESTRUCTCLASS, FREESTRUCTDEF);
- doswitch("ADDITIONALDATASWITCH", "additionaldata",
- ADDITIONALDATAARGS, ADDITIONALDATATYPE,
- ADDITIONALDATACLASS, ADDITIONALDATADEF);
- doswitch("DIGESTSWITCH", "digest",
- DIGESTARGS, DIGESTTYPE,
- DIGESTCLASS, DIGESTDEF);
- doswitch("CHECKOWNERSWITCH", "checkowner",
- CHECKOWNERARGS, CHECKOWNERTYPE,
- CHECKOWNERCLASS, CHECKOWNERDEF);
- doswitch("CHECKNAMESSWITCH", "checknames",
- CHECKNAMESARGS, CHECKNAMESTYPE,
- CHECKNAMESCLASS, CHECKNAMESDEF);
-
- /*
- * From here down, we are processing the rdata names and
- * attributes.
- */
-
-#define PRINT_COMMA(x) (x == maxtype ? "" : ",")
-
-#define METANOTQUESTION "DNS_RDATATYPEATTR_META | " \
- "DNS_RDATATYPEATTR_NOTQUESTION"
-#define METAQUESTIONONLY "DNS_RDATATYPEATTR_META | " \
- "DNS_RDATATYPEATTR_QUESTIONONLY"
-#define RESERVED "DNS_RDATATYPEATTR_RESERVED"
-
- /*
- * Add in reserved/special types. This will let us
- * sort them without special cases.
- */
- insert_into_typenames(0, "reserved0", RESERVED);
- insert_into_typenames(31, "eid", RESERVED);
- insert_into_typenames(32, "nimloc", RESERVED);
- insert_into_typenames(34, "atma", RESERVED);
- insert_into_typenames(100, "uinfo", RESERVED);
- insert_into_typenames(101, "uid", RESERVED);
- insert_into_typenames(102, "gid", RESERVED);
- insert_into_typenames(251, "ixfr", METAQUESTIONONLY);
- insert_into_typenames(252, "axfr", METAQUESTIONONLY);
- insert_into_typenames(253, "mailb", METAQUESTIONONLY);
- insert_into_typenames(254, "maila", METAQUESTIONONLY);
- insert_into_typenames(255, "any", METAQUESTIONONLY);
-
- /*
- * Spit out a quick and dirty hash function. Here,
- * we walk through the list of type names, and calculate
- * a hash. This isn't perfect, but it will generate "pretty
- * good" estimates. Lowercase the characters before
- * computing in all cases.
- *
- * Here, walk the list from top to bottom, calculating
- * the hash (mod 256) for each name.
- */
- fprintf(stdout, "#define RDATATYPE_COMPARE(_s, _d, _tn, _n, _tp) \\\n");
- fprintf(stdout, "\tdo { \\\n");
- fprintf(stdout, "\t\tif (sizeof(_s) - 1 == _n && \\\n"
- "\t\t strncasecmp(_s,(_tn),"
- "(sizeof(_s) - 1)) == 0) { \\\n");
- fprintf(stdout, "\t\t\tif ((dns_rdatatype_attributes(_d) & "
- "DNS_RDATATYPEATTR_RESERVED) != 0) \\\n");
- fprintf(stdout, "\t\t\t\treturn (ISC_R_NOTIMPLEMENTED); \\\n");
- fprintf(stdout, "\t\t\t*(_tp) = _d; \\\n");
- fprintf(stdout, "\t\t\treturn (ISC_R_SUCCESS); \\\n");
- fprintf(stdout, "\t\t} \\\n");
- fprintf(stdout, "\t} while (0)\n\n");
-
- fprintf(stdout, "#define RDATATYPE_FROMTEXT_SW(_hash,"
- "_typename,_length,_typep) \\\n");
- fprintf(stdout, "\tswitch (_hash) { \\\n");
- for (i = 0; i <= maxtype; i++) {
- ttn = find_typename(i);
- if (ttn == NULL)
- continue;
-
- /*
- * Skip entries we already processed.
- */
- if (ttn->sorted != 0)
- continue;
-
- hash = HASH(ttn->typename);
- fprintf(stdout, "\t\tcase %u: \\\n", hash);
-
- /*
- * Find all other entries that happen to match
- * this hash.
- */
- for (j = 0; j <= maxtype; j++) {
- ttn2 = find_typename(j);
- if (ttn2 == NULL)
- continue;
- if (hash == HASH(ttn2->typename)) {
- fprintf(stdout, "\t\t\tRDATATYPE_COMPARE"
- "(\"%s\", %u, "
- "_typename, _length, _typep); \\\n",
- ttn2->typename, ttn2->type);
- ttn2->sorted = 1;
- }
- }
- fprintf(stdout, "\t\t\tbreak; \\\n");
- }
- fprintf(stdout, "\t}\n");
-
- fprintf(stdout, "#define RDATATYPE_ATTRIBUTE_SW \\\n");
- fprintf(stdout, "\tswitch (type) { \\\n");
- for (i = 0; i <= maxtype; i++) {
- ttn = find_typename(i);
- if (ttn == NULL)
- continue;
- fprintf(stdout, "\tcase %u: return (%s); \\\n",
- i, upper(ttn->attr));
- }
- fprintf(stdout, "\t}\n");
-
- fprintf(stdout, "#define RDATATYPE_TOTEXT_SW \\\n");
- fprintf(stdout, "\tswitch (type) { \\\n");
- for (i = 0; i <= maxtype; i++) {
- ttn = find_typename(i);
- if (ttn == NULL)
- continue;
- fprintf(stdout, "\tcase %u: return "
- "(str_totext(\"%s\", target)); \\\n",
- i, upper(ttn->typename));
- }
- fprintf(stdout, "\t}\n");
-
- fputs("#endif /* DNS_CODE_H */\n", stdout);
- } else if (type_enum) {
- char *s;
-
- fprintf(stdout, "#ifndef DNS_ENUMTYPE_H\n");
- fprintf(stdout, "#define DNS_ENUMTYPE_H 1\n\n");
-
- fprintf(stdout, "enum {\n");
- fprintf(stdout, "\tdns_rdatatype_none = 0,\n");
-
- lasttype = 0;
- for (tt = types; tt != NULL; tt = tt->next)
- if (tt->type != lasttype)
- fprintf(stdout,
- "\tdns_rdatatype_%s = %d,\n",
- funname(tt->typename, buf1),
- lasttype = tt->type);
-
- fprintf(stdout, "\tdns_rdatatype_ixfr = 251,\n");
- fprintf(stdout, "\tdns_rdatatype_axfr = 252,\n");
- fprintf(stdout, "\tdns_rdatatype_mailb = 253,\n");
- fprintf(stdout, "\tdns_rdatatype_maila = 254,\n");
- fprintf(stdout, "\tdns_rdatatype_any = 255\n");
-
- fprintf(stdout, "};\n\n");
-
- fprintf(stdout, "#define dns_rdatatype_none\t"
- "((dns_rdatatype_t)dns_rdatatype_none)\n");
-
- for (tt = types; tt != NULL; tt = tt->next)
- if (tt->type != lasttype) {
- s = funname(tt->typename, buf1);
- fprintf(stdout,
- "#define dns_rdatatype_%s\t%s"
- "((dns_rdatatype_t)dns_rdatatype_%s)"
- "\n",
- s, strlen(s) < 2U ? "\t" : "", s);
- lasttype = tt->type;
- }
-
- fprintf(stdout, "#define dns_rdatatype_ixfr\t"
- "((dns_rdatatype_t)dns_rdatatype_ixfr)\n");
- fprintf(stdout, "#define dns_rdatatype_axfr\t"
- "((dns_rdatatype_t)dns_rdatatype_axfr)\n");
- fprintf(stdout, "#define dns_rdatatype_mailb\t"
- "((dns_rdatatype_t)dns_rdatatype_mailb)\n");
- fprintf(stdout, "#define dns_rdatatype_maila\t"
- "((dns_rdatatype_t)dns_rdatatype_maila)\n");
- fprintf(stdout, "#define dns_rdatatype_any\t"
- "((dns_rdatatype_t)dns_rdatatype_any)\n");
-
- fprintf(stdout, "\n#endif /* DNS_ENUMTYPE_H */\n");
-
- } else if (class_enum) {
- char *s;
- int classnum;
-
- fprintf(stdout, "#ifndef DNS_ENUMCLASS_H\n");
- fprintf(stdout, "#define DNS_ENUMCLASS_H 1\n\n");
-
- fprintf(stdout, "enum {\n");
-
- fprintf(stdout, "\tdns_rdataclass_reserved0 = 0,\n");
- fprintf(stdout, "#define dns_rdataclass_reserved0 \\\n\t\t\t\t"
- "((dns_rdataclass_t)dns_rdataclass_reserved0)\n");
-
-#define PRINTCLASS(name, num) \
- do { \
- s = funname(name, buf1); \
- classnum = num; \
- fprintf(stdout, "\tdns_rdataclass_%s = %d%s\n", s, classnum, \
- classnum != 255 ? "," : ""); \
- fprintf(stdout, "#define dns_rdataclass_%s\t" \
- "((dns_rdataclass_t)dns_rdataclass_%s)\n", s, s); \
- } while (0)
-
- for (cc = classes; cc != NULL; cc = cc->next) {
- if (cc->rdclass == 3)
- PRINTCLASS("chaos", 3);
- else if (cc->rdclass == 255)
- PRINTCLASS("none", 254);
- PRINTCLASS(cc->classname, cc->rdclass);
- }
-
-#undef PRINTCLASS
-
- fprintf(stdout, "};\n\n");
- fprintf(stdout, "#endif /* DNS_ENUMCLASS_H */\n");
- } else if (structs) {
- if (prefix != NULL) {
- if ((fd = fopen(prefix,"r")) != NULL) {
- while (fgets(buf, sizeof(buf), fd) != NULL)
- fputs(buf, stdout);
- fclose(fd);
- }
- }
- for (tt = types; tt != NULL; tt = tt->next) {
- sprintf(buf, "%s/%s_%d.h",
- tt->dirname, tt->typename, tt->type);
- if ((fd = fopen(buf,"r")) != NULL) {
- while (fgets(buf, sizeof(buf), fd) != NULL)
- fputs(buf, stdout);
- fclose(fd);
- }
- }
- if (suffix != NULL) {
- if ((fd = fopen(suffix,"r")) != NULL) {
- while (fgets(buf, sizeof(buf), fd) != NULL)
- fputs(buf, stdout);
- fclose(fd);
- }
- }
- } else if (depend) {
- for (tt = types; tt != NULL; tt = tt->next)
- fprintf(stdout, "%s:\t%s/%s_%d.h\n", file,
- tt->dirname, tt->typename, tt->type);
- }
-
- if (ferror(stdout) != 0)
- exit(1);
-
- return (0);
-}
OpenPOWER on IntegriCloud