PERFORCE change 123569 for review
Fredrik Lindberg
fli at FreeBSD.org
Mon Jul 16 01:18:07 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=123569
Change 123569 by fli at fli_nexus on 2007/07/16 01:17:06
- Add the necessary bits needed for the "pointer" function.
- A rrset now has a uniqe identifier instead of a "primary name",
the primary name and alternative names are simply listed in
the priority order using the "name"-option.
The "alt"-option used for alternative names is therefore removed.
- Style fixes.
Affected files ...
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#2 edit
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/token.l#2 edit
Differences ...
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/parse.y#2 (text+ko) ====
@@ -36,8 +36,8 @@
%token IFACE ZONE RRSET RES OBRACE EBRACE EQ SEMI
%token DEF_TTL DEF_TTL_SHARED
-%token RRSET_ALT RRSET_SHARED RRSET_TTL
-%token RES_DATA RES_TTL
+%token RRSET_NAME RRSET_SHARED RRSET_TTL
+%token RES_DATA RES_TTL RES_RECORD
%token <ptr> STRING LVALUE
%{
@@ -80,6 +80,7 @@
struct cfg_resdata {
TAILQ_ENTRY(cfg_resdata) csd_next;
char *csd_data;
+ int csd_auto;
};
struct cfg_res {
@@ -92,6 +93,7 @@
struct cfg_rrset {
TAILQ_HEAD(, cfg_name) cr_names;
TAILQ_HEAD(, cfg_res) cr_res;
+ char *cr_ident;
int cr_shared;
int cr_namcount;
uint32_t cr_ttl;;
@@ -206,8 +208,6 @@
rrset_set:
RRSET STRING OBRACE {
- struct cfg_name *cn;
-
if (!cfg_ifvalid && cfg_ifpassed)
break;
@@ -216,15 +216,8 @@
bzero(&cfg_rrset, sizeof(struct cfg_rrset));
TAILQ_INIT(&cfg_rrset.cr_names);
TAILQ_INIT(&cfg_rrset.cr_res);
- cn = malloc(sizeof(struct cfg_name));
- if (cfg_zone == NULL)
- cn->cn_name = $2;
- else {
- asprintf(&cn->cn_name, "%s.%s", $2, cfg_zone);
- free($2);
- }
- TAILQ_INSERT_TAIL(&cfg_rrset.cr_names, cn, cn_next);
- cfg_rrset.cr_namcount = 1;
+ cfg_rrset.cr_namcount = 0;
+ cfg_rrset.cr_ident = $2;
}
rrset_content EBRACE {
struct cfg_name *cn;
@@ -238,8 +231,15 @@
if (!cfg_ifvalid && cfg_ifpassed)
break;
- dprintf(DEBUG_CFGPARSE, "rrset names%s",
- (cfg_rrset.cr_shared ? " (shared)" : ""));
+ if (cfg_rrset.cr_namcount == 0) {
+ dprintf(DEBUG_CFGPARSE, "No names on rrset %s",
+ cfg_rrset.cr_ident);
+ break;
+ }
+
+ dprintf(DEBUG_CFGPARSE, "rrset \"%s\" names%s (%d)",
+ cfg_rrset.cr_ident, (cfg_rrset.cr_shared ?
+ " (shared)" : ""), cfg_rrset.cr_namcount);
/* Do not free names, its in use by dbr_add() */
names = malloc(sizeof(wchar_t *) * (cfg_rrset.cr_namcount + 1));
@@ -253,7 +253,8 @@
}
names[i] = NULL;
- dr = dbr_add(dbr, names, cfg_rrset.cr_shared ? DR_SHARED : DR_UNIQUE);
+ dr = dbr_add(dbr, cfg_rrset.cr_ident, names,
+ cfg_rrset.cr_shared);
assert(dr != NULL);
dprintf(DEBUG_CFGPARSE, "rrset resources");
@@ -266,11 +267,17 @@
dprintf(DEBUG_CFGPARSE, " data = %s, ttl = %d",
csd->csd_data, ttl);
- len = strlen(csd->csd_data) + 1;
- wp = malloc(len * sizeof(wchar_t));
- mbstowcs(wp, csd->csd_data, len);
- dbr_res_add(dr, cs->cs_type, ttl, wp);
- free(wp);
+ if (csd->csd_auto) {
+ dbr_res_add(dr, cs->cs_type, ttl,
+ csd->csd_data, 1);
+ }
+ else {
+ len = strlen(csd->csd_data) + 1;
+ wp = malloc(len * sizeof(wchar_t));
+ mbstowcs(wp, csd->csd_data, len);
+ dbr_res_add(dr, cs->cs_type, ttl,
+ wp, 0);
+ }
}
}
@@ -297,7 +304,8 @@
TAILQ_INIT(&cs->cs_data);
TAILQ_INSERT_TAIL(&cfg_rrset.cr_res, cs, cs_next);
cfg_res = cs;
- dprintf(DEBUG_CFGPARSE, "res %s (%d) statement\n", $2, cs->cs_type);
+ dprintf(DEBUG_CFGPARSE, "res %s (%d) statement\n",
+ $2, cs->cs_type);
}
res_content EBRACE {
if (!cfg_ifvalid && cfg_ifpassed)
@@ -323,13 +331,13 @@
free($3);
}
|
- RRSET_ALT EQ STRING SEMI {
+ RRSET_NAME EQ STRING SEMI {
struct cfg_name *cn;
if (!cfg_ifvalid && cfg_ifpassed)
break;
- dprintf(DEBUG_CFGPARSE, "rrset alt = %s", $3);
+ dprintf(DEBUG_CFGPARSE, "rrset name = %s", $3);
cn = malloc(sizeof(struct cfg_name));
if (cfg_zone == NULL)
cn->cn_name = $3;
@@ -358,6 +366,20 @@
dprintf(DEBUG_CFGPARSE, "res data = %s", $3);
csd = malloc(sizeof(struct cfg_resdata));
csd->csd_data = $3;
+ csd->csd_auto = 0;
+ TAILQ_INSERT_TAIL(&cfg_res->cs_data, csd, csd_next);
+ }
+ |
+ RES_RECORD EQ STRING SEMI {
+ struct cfg_resdata *csd;
+
+ if (!cfg_ifvalid && cfg_ifpassed)
+ break;
+
+ dprintf(DEBUG_CFGPARSE, "res record pointer = %s", $3);
+ csd = malloc(sizeof(struct cfg_resdata));
+ csd->csd_data = $3;
+ csd->csd_auto = 1;
TAILQ_INSERT_TAIL(&cfg_res->cs_data, csd, csd_next);
}
|
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/token.l#2 (text+ko) ====
@@ -67,7 +67,7 @@
}
<TSTRING>. { yymore(); }
-<TRRSET>alt { yy_push_state(LVAL); return RRSET_ALT; }
+<TRRSET>name { yy_push_state(LVAL); return RRSET_NAME; }
<TRRSET>ttl { yy_push_state(LVAL); return RRSET_TTL; }
<TRRSET>shared { yy_push_state(LVAL); return RRSET_SHARED; }
<TRRSET>[a-zA-Z0-9\_\$\(\)]+ {
@@ -77,6 +77,7 @@
<TRES>data { yy_push_state(LVAL); return RES_DATA; }
<TRES>ttl { yy_push_state(LVAL); return RES_TTL; }
+<TRES>record { yy_push_state(LVAL); return RES_RECORD; }
<TRES>[a-zA-Z0-9\_]+ {
yy_push_state(LVAL); yylval.ptr = strdup(yytext);
return LVALUE;
More information about the p4-projects
mailing list